Rails 3.2:将“has_one”关联对象传递给View

时间:2012-04-02 18:08:25

标签: ruby-on-rails ruby ruby-on-rails-3.1

我有一个查询模型:

class Query < ActiveRecord::Base
   belongs_to :test
end

与测试模型有关:

class Test < ActiveRecord::Base
 has_one :query
end

我想在列表中显示所有查询以及与之关联的测试描述。我已将以下内容放入我的查询控制器文件中以获取索引方法:

Query.includes(:test).each do |query|
end

我的问题有两个方面:

  1. 以上是否正确?

  2. 我可以在index.html.erb文件的“view”字段中使用哪些代码来显示与Query关联的测试的描述?如果我写

    <td><%= query.test.description %></td>
    
  3. 我收到以下错误:“nil的未定义方法`描述:NilClass”

    感谢。

2 个答案:

答案 0 :(得分:1)

你的循环不应该在控制器内。您的查询控制器应该只包含以下内容:

def index
  @queries = Query.includes(:test).all
end

并且您的查询/索引视图应包含循环:

<table>
<% @queries.each do |query| %>
  <tr>
    <td><%= query.test.description %></td>
  </tr>
<% end %>
</table>

你应该通过使用partials和Rail的内置支持来渲染集合来进一步折射:

应用程序/视图/询问/ index.html.erb:

<table><%= render @queries %></table>

应用程序/视图/询问/ _query.html.erb:

<tr><%= render query.test %></tr>

应用程序/视图/测试/ _test.html.erb:

<td><%= test.description %></td>

答案 1 :(得分:0)

  1. 尝试Query.where(:test_id =&gt; params [:test_id])。all.each ...

  2. 如果您有query.test == nil,则会出错。尝试&lt;%= query.test.try:description%&gt;