我正在QA网站上工作,我有一个问题模型和一个答案模型,它们之间的关联就像
class Question < ActiveRecord::Base
has_many :answers
end
我的答案模型是
class Answer < ActiveRecord::Base
belongs_to :question
end
现在我需要在问题和答案之间创建另一个关联,在那里我可以访问问题的作者找到最好的答案。所以我需要的是像
class Question < ActiveRecord::Base
has_many :answers
has_one :accepted_answer, :class_name => 'Answer', :foreign_key => ['answer_id, accepted']
end
这种关联正确失败,因为我无法指定我希望被接受为真并且我收到MySQL错误。有没有办法在使用布尔值作为复合外键时可以使用它?
MySQL server version for the right syntax to use near '["answer_id", "accepted"] = 30) LIMIT 1' at line 1: SELECT `answers`.* FROM `answers` WHERE (`answers`.["answer_id", "accepted"] = 30)
我目前使用的解决方案是从问题的答案创建一个关联,如下所示
class Answer < ActiveRecord::Base
belongs_to :question
has_one :inverse_accepted_answer, :class_name => 'Question', :foreign_key => 'accepted_id'
end
和问题
Class Question < ActiveRecord::Base
belongs_to :answer, :foreign_key => 'accepted_id'
has_many :answers
end
问题是在这种情况下我将所选答案作为Question.find(10).answer访问,而不是使用更具表现力的名称作为selected_answer。
有没有办法可以从belongs_to端定义关系的名称。其次,正确的方法是什么。我的技术似乎要纠正
我正在使用Rails 3和Ruby 1.9.2
提前致谢
答案 0 :(得分:1)
这样的事情:
has_one :accepted_answer, :class_name => 'Answer', :conditions => "accepted = true"