Rails 4:我如何通过关系记录has_many?

时间:2014-10-05 21:03:45

标签: ruby-on-rails ruby ruby-on-rails-4

我有3个表:电话,结果,问题。我还有3个型号:电话,结果,问题

Phonecalls的架构是: id,date,user_id

问题架构是: id,text,error

结果架构是: id,phonecall_id,question_id,result

我的Phonecall.rb是:

class Phonecall < ActiveRecord::Base
  has_many :results
  has_many :questions, :through => :results
end

我的Result.rb是:

class Result < ActiveRecord::Base
  has_one :question
  belongs_to :phonecall
end

我的问题.rb:

class Question < ActiveRecord::Base
  belongs_to :result
  has_many :phonecalls, :through => :result
end

所以我如何在这个循环中获得问题属性:

<%
@phonecalls.each do |ph|
  ph.results.each do |r|

%>
    <%= ph.id %>
    <%= r.id %>       
<%
  end
end
%>

如果我试图获得r.question.id - 我有错误。如果我尝试用ph.questions做一些循环 - 我有错误。

我怎么做?

2 个答案:

答案 0 :(得分:1)

has_many :phonecalls, through: :result允许您这样做:

question.phonecalls会返回与您的phonecalls个实例关联的question数组。

反过来并回答你的问题:

@phonecalls.each do |ph|
  ph.questions.each do |question|
   puts ph.id
   puts question.id
  end
end

答案 1 :(得分:0)

是的,我的问题出在我的人际关系中。

在Result.rb中

我告诉结果对问题感到怀疑,但它是假的。 现在我有这种关系: Result.rb:

class Result < ActiveRecord::Base
  belongs_to :question
  belongs_to :phonecall
end

Questio.rb

class Question < ActiveRecord::Base
  has_many :result
  has_many :phonecalls, :through => :result
end

它为我工作。