Ruby on rails ActiveRecord::AssociationTypeMismatch,我缺少什么?
我在这里遗漏了一些东西: 价格等级:Ruby on rails ActiveRecord::AssociationTypeMismatch,我缺少什么?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我在这里遗漏了一些东西: 价格等级: class Price < ActiveRecord::Base has_many :diamonds scope :for_diamond, -> (diamond) { where("colour = ? AND clarity = ? AND weight_min < ? AND weight_max > ?", diamond.
class Price < ActiveRecord::Base
has_many :diamonds
scope :for_diamond, -> (diamond) { where("colour = ? AND clarity = ? AND weight_min < ? AND weight_max > ?",
diamond.color_code, diamond.clarity_code, diamond.carat_weight,
diamond.carat_weight).first }
end
end
end
它似乎确实起作用了
我错过了什么
编辑:
我试着改变:
d、 价格=钻石的价格
致:
d、 price\u id=price.for\u diamondd
没有错误,但仍然没有设置价格id
编辑:
尝试使用类方法而不是范围:
def self.price_for_diamond(diamond)
Price.where("colour = ? AND clarity = ? AND weight_min < ? AND weight_max > ?",
diamond.color_code, diamond.clarity_code, diamond.carat_weight,
diamond.carat_weight).first
end
但是仍然没有运气。作用域应该总是返回一个可链接的ActiveRecord::Relation-您尝试的方法可能会奏效,但不是一个好主意。它应该简单地定义为一个类方法。嗨,我尝试使用上面添加的一个类方法,但仍然存在错误。那么price\u for\u diamond现在是price对象上的一个类方法,它返回一个price对象?你还是不能把它分配给d.price?
d = Diamond.last
d.price = Price.for_diamond(d)
d.save
def self.price_for_diamond(diamond)
Price.where("colour = ? AND clarity = ? AND weight_min < ? AND weight_max > ?",
diamond.color_code, diamond.clarity_code, diamond.carat_weight,
diamond.carat_weight).first
end