Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::AssociationTypeMismatch,我缺少什么?_Ruby On Rails_Activerecord - Fatal编程技术网

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