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