我机智了。我升级到Rails 4.2.10,一切都很糟糕。
这是/models/product.rb的相关部分
class Product < ActiveRecord::Base
delegate_attributes :price, :is_master, :to => :master
这是/models/variant.rb:
class Variant < ActiveRecord::Base
belongs_to :product
变体表具有“价格”和“ is_master”字段。产品表没有。
过去,人们可以访问Product.price并获取/设置主版本的价格(每个产品实际上只有一个版本,目前的设置方式)。
现在它抱怨:
NoMethodError: undefined method `price=' for #<Product:0x0000000d63b980>
是的。没有称为price =的方法。但是,为什么以前不是这个问题?如果创建该方法,我应该在该方法中放什么呢?
以下是在db / seeds.rb中生成产品的代码:
product = Product.create!({
name: "Product_#{i}",
description: Faker::Lorem.sentence,
store_id: u.store.id,
master_attributes: {
listing_folder_id: uuids[i],
version_folder_id: uuids[i]
}
})
product.price = 10
product.save!
end
答案 0 :(得分:0)
delegate_attributes
不是Rails方法,看起来像是来自没有被主动维护的一个或多个gem?
如果您正在使用的任何宝石都有新版本可能会有所帮助,因为简短的答案是属性的“委托”部分将涉及设置属性和,因此它会为您生成#price=
。
如果您想自己定义它,则应该这样做(在您的Product
类中):
def price=(*args)
master.price=(*args)
end
或者如果您想更明确:
def price=(amount)
master.price = amount
end