NoMethodError - 自升级到 Rails 4 后新增
NoMethodError - new since upgrading to Rails 4
我已经无计可施了。我升级到 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
变体 table 具有 "price" 和 "is_master" 的字段。产品 table 没有。
以前可以访问 Product.price 并且会 get/set 主变体的价格(每个产品实际上只有一个变体,目前的设置方式).
现在它抱怨:
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
delegate_attributes
不是 Rails 方法,看起来它来自 gem(或 gems),但未得到积极维护?
如果您使用的 gem 有新版本可能会有帮助,因为简短的回答是 "delegating" 属性的一部分将涉及获取 和设置属性,所以它会为你生成#price=
。
如果您想自己定义它,应该这样做(在您的 Product
class 内):
def price=(*args)
master.price=(*args)
end
或者如果你想更明确:
def price=(amount)
master.price = amount
end
我已经无计可施了。我升级到 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
变体 table 具有 "price" 和 "is_master" 的字段。产品 table 没有。
以前可以访问 Product.price 并且会 get/set 主变体的价格(每个产品实际上只有一个变体,目前的设置方式).
现在它抱怨:
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
delegate_attributes
不是 Rails 方法,看起来它来自 gem(或 gems),但未得到积极维护?
如果您使用的 gem 有新版本可能会有帮助,因为简短的回答是 "delegating" 属性的一部分将涉及获取 和设置属性,所以它会为你生成#price=
。
如果您想自己定义它,应该这样做(在您的 Product
class 内):
def price=(*args)
master.price=(*args)
end
或者如果你想更明确:
def price=(amount)
master.price = amount
end