2013-02-26 110 views
1

我有一个属于关系的模型。Ruby On Rails Model没有方法

class Product < ActiveRecord::Base 
    attr_accessible :name, :price, :request_id, :url 

    # Relationships 
    belongs_to :request 

end 

class Request < ActiveRecord::Base 
    attr_accessible :category, :keyword 

    # Relationships 
    has_many :products 

end 

这是在我的控制器功能的代码 产物= Product.where({:ASIN => ASIN})第一

 # See if the product exists 
    begin 
     #This throws a method not found error for where 
     product = Product.where({ :name => name }).first 

    rescue 
     Product.new 
      # This throws a method not found error for request_id 
     product.request_id = request.id 
     product.save 
    end 

我试图创建一个新的产品对象等。所以 产品= Product.first(:条件=> {:名称=>名称})

当我打电话,我得到一个错误说undefined method 'first' for Product:Class 我试图这样做Product.new,我不能访问任何属性。我得到这个每个人undefined method 'request_id=' for #<Product:0x007ffce89aa7f8>

我已经能够保存请求对象。我在做什么产品有问题?

编辑:

所以事实证明有正被进口,这不是一个ActiveRecord类的旧产品的数据类型。它正在使用,而不是我的Product :: ActiveRecord。我删除了这个导入,这很好。抱歉浪费了大家的时间。

不知道这个问题该怎么处理。

+0

'product = Product.where(:conditions => {:name => name})first' – 2013-02-26 01:50:41

+0

你说你试图“创建一个新产品”,但你打电话给'.first',它是用于选择“产品”。如果你想用一个给定的名字来初始化一个新的Product,你应该使用下面的代码:'product = Product.new(:name => name)' – 2013-02-26 01:52:00

+0

我试图创建一个新产品(空的)与Product.new。这不起作用。我尝试了Product.where,并得到了这个未定义的方法'Where'for Product:Class – smokingoyster 2013-02-26 01:57:00

回答

1

首先检查你的产品类是通过键入正确设置:

rails c 
# after console has loaded 
Product 

如果这看起来正确的,那么我们将尝试通过调用来实例化一个产品:

# Create a new product 
product = Product.new(name: "first product", price: 100, url: "http://www.example.com") 
# Persist this object to the database 
product.save 

如果您缺少任何运行另一个迁移的属性以将它们添加到Product表中。

如果这些建议都不起作用,请检查以确保项目中不存在具有相同名称的现有类。这会导致各种错误,并会解释某些未找到的方法。

+0

控制台将产品模型罚款。如果我试图将任何参数传递给Product.new,我会得到这个“错误数量的参数(1代表0)' – smokingoyster 2013-02-26 03:08:44

+0

您能从控制台打印出您正在做什么吗? – tomciopp 2013-02-26 03:10:54

+0

我在控制器中运行产品创建代码。我可以使用我在控制器中使用的确切代码在控制台中创建和保存产品。但是在控制器中,每次尝试使用Product类时都会发生错误。 – smokingoyster 2013-02-26 03:23:44

2

您的Product类是ActiveRecord :: Base类吗?你可以通过运行找到:

Product.ancestors.include?(ActiveRecord::Base) 

如果这返回false,它会从其他地方加载类。

+0

我编辑了上面的问题。不知道是否需要删除它。问题恰恰在于,我有一个旧的进口带来不同的产品类别。 – smokingoyster 2013-03-04 15:13:03