Rails 3.2: Передайте объект ассоциации has_one в View - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть модель запроса:

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. Какой код можно использовать в поле «view» моего файла index.html.erb, чтобы отобразить описание теста, связанного с запросом?Если я пишу

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

, я получаю следующую ошибку: "неопределенный метод` description 'для nil: NilClass "

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Ваш цикл не должен быть внутри вашего контроллера.Ваш контроллер запросов должен просто содержать следующее:

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

, а представление запросов / индекса должно содержать цикл:

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

Вы должны дополнительно рефракторить это, используя партиалы и встроенные в Railв поддержку рендеринга коллекций:

app / views / questions / index.html.erb:

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

app / views / запросы / _query.html.erb:

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

app / views / tests / _test.html.erb:

<td><%= test.description %></td>
0 голосов
/ 02 апреля 2012
  1. Попробуйте Query.where (: test_id => params [: test_id]). All.each ...

  2. Если у вас есть query.test == ноль, это будет ошибка.Попробуйте <% = query.test.try: description%>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...