Rails中相同模型之间的多个关联

时间:2010-11-26 14:44:41

标签: ruby-on-rails-3 associations models

我正在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

提前致谢

1 个答案:

答案 0 :(得分:1)

这样的事情:

has_one :accepted_answer, :class_name => 'Answer', :conditions => "accepted = true"