开发者

Multiple Associations between the same model in Rails

I am working on QA site where I have a Question model and an Answer model and the associatio开发者_运维技巧n between them is like

class Question < ActiveRecord::Base
  has_many :answers
end

My answers model is

class Answer < ActiveRecord::Base
  belongs_to :question
end

Now I need to create another association between question and answer where I can access the one answer the author of the question finds the best. So what I need is something like

class Question < ActiveRecord::Base
  has_many :answers
  has_one :accepted_answer, :class_name => 'Answer', :foreign_key => ['answer_id, accepted'] 
end

This association fails rightly as I have no way of specifying that I expect accepted to be true and I get a MySQL error. Is there a way I can get this to work while using a boolean as composite foreign key?

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)

The solution that I have currently employed is creating an association from answers to Question as follows

class Answer < ActiveRecord::Base
  belongs_to :question

  has_one :inverse_accepted_answer, :class_name => 'Question', :foreign_key => 'accepted_id' 

end

and for Question as

Class Question < ActiveRecord::Base
 belongs_to :answer, :foreign_key => 'accepted_id'
 has_many :answers
end

The problem is in this case i access the selected answer as Question.find(10).answer instead of using a more expressive name as selected_answer.

Is there a way i can define a name for the relationship from the belongs_to end. Secondly what would be the right way to go about this. I technique seems to round about to correct

I am using Rails 3 and Ruby 1.9.2

Thanks in advance


what about something like that:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜