我有一个属于关系的模型。
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 = Product.where({:asin =&gt; asin})。first
# 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 = Product.first(:conditions =&gt; {:name =&gt; name})
当我打电话说我收到错误时说undefined method 'first' for Product:Class
我尝试过做Product.new而且我无法访问任何属性。我为每一个undefined method 'request_id=' for #<Product:0x007ffce89aa7f8>
我已经能够保存请求对象了。我的产品出了什么问题?
编辑:
事实证明,导入的旧Product数据类型不是ActiveRecord类。它使用的是而不是我的Product :: ActiveRecord。我删除了那个导入,这很好。很抱歉浪费了每个人的时间。
不确定这个问题的正确协议是什么。
答案 0 :(得分:2)
您的Product
类是ActiveRecord :: Base类吗?您可以通过运行找到:
Product.ancestors.include?(ActiveRecord::Base)
如果返回false,则从其他地方加载类。
答案 1 :(得分:1)
首先通过输入以下内容检查您的Product类是否已正确设置:
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表中。
如果这些建议都不起作用,请检查以确保项目中没有现有的具有相同名称的类。这会导致各种错误,并会解释某些方法无法找到。