我有3个型号:
User
has_many :questions
has_many :corrections
end
Question
has_one :correction
belongs_to :user
end
Correction
belongs_to :user
belongs_to :question
因此,如果用户Bob提出问题,那么用户Terry可以检查它,如果错误提供了更正。
让我们留下鲍勃,并假设他对其他5位用户进行了善意的纠正,即让他们认为他很幸运能够从其他用户那里得到3次更正。
我希望能够做到这样的事情
@ bob.corrections_offered => 5个修正对象 @ bob.corrections_received => 3个修正对象
第一个很容易,因为它真的只是引擎盖下的@ bob.corrections。但我不知道如何实施后者。有人可以帮忙吗?
更新
所以我尝试使用通过如此建议(哦,实际上上面的问题模型实际上在我的代码中称为句子.I.e.User => Sentence => Correction。)
has_many :sentences
has_many :corrections_received, :through => :sentences, :class_name => 'Correction'
但在控制台中出现此错误
的ActiveRecord :: HasManyThroughSourceAssociationNotFoundError: 找不到来源 association(s):模型中的更正 句子。试试'has_many :corrections_received,:through => :sentence,:source => ”。是吗 其中之一:语言,:纠正,:用户, 或者:检查员?
所以试过以下
has_many :corrections_received, :through => :sentences, :source => :correction
但得到了
的ActiveRecord :: HasManyThroughSourceAssociationMacroError: 源反射宏无效 :has_one for has_many :corrections_received,:through => :句子。使用:source指定 来源反思。
不确定哪里出错......
答案 0 :(得分:5)
您可以在用户模型中添加has_many through
关系,如此
class User
#your usual relationships
has_many :corrections_received, :through => :questions, :class_name => 'Correction'
end
答案 1 :(得分:2)
尝试以下方式:
has_many :corrections_received,:class_name=>'Correction',:conditions=>...
答案 2 :(得分:1)
通常情况下,您应该可以使用:through,但我不确定是否可以使用两个用户 - >校正关系。
在任何情况下,模型类中的辅助方法都应该足够简单。这样的事情。
def corrections_received
result = Array.new
questions.each do |q|
if q.correction
result.push q.correction
end
end
result
end
由于我对这些东西不熟悉,欢迎更正!