Рендеринг 'own_to "в вопросе представления индекса - Ruby on Rails - PullRequest
2 голосов
/ 12 апреля 2010

Я создал простое приложение для блога с Ruby on Rails. Заявка состоит из двух таблиц, постов и комментариев. Комментарии belongs_to :post и сообщения has_many :comments.

Я создал таблицу сообщений со следующими столбцами: title:string, body:text. Я создал таблицу комментариев со следующими столбцами: body:text post_id:integer name:string email:string

На экране /views/comments/index.html.erb я хотел бы показать список всех комментариев с заголовком сообщения. В настоящее время в индексном представлении отображаются только post_id, body, name, email.

Как заменить столбец post_id соответствующим заголовком сообщения? Вот мой код:

Действие CommentsController Index:

  def index
    @comments = Comment.all :order => "created_at DESC"
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @comments }
      format.json { render :json => @comments }
      format.atom
    end
  end

/ мнения / комментарии / index.html.erb

<h1>Listing comments</h1>

<table>
  <tr>
    <th>Post</th>
    <th>Body</th>
  </tr>

<% @comments.each do |comment| %>
  <tr>
    <td><%=h comment.post_id %></td>
    <td><%=h comment.body %></td>
    <td><%=h comment.name %></td>
    <td><%=h comment.email %></td>
  </tr>
<% end %>
</table>

<br />

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Если у вас есть 100 комментариев, использование comments.post.title с вашим кодом приведет к 101 запросам! См. Раздел Eager loading на этой странице документов. Стремительная загрузка здесь уменьшит его до 2 .

def index
  @comments = Comment.find(:all, :include => :post, :order => "created_at DESC")
  # ...
end

По вашему мнению, вы можете получить доступ к заголовку записи как

<%= comment.post.title rescue "No post" %>

Редактировать: Я использую rescue "No Post", потому что у вас есть некоторые комментарии с post_id = nil и некоторые комментарии с post_id, которые указывают на сообщения, которые больше не существуют.

0 голосов
/ 13 января 2012

try @ post.comment.title.Так как в посте много комментариев, принадлежащих посту, то это своего рода родительские дочерние отношения.

0 голосов
/ 12 апреля 2010

Вы можете просто сделать <%=h comment.post.title %>, чтобы вывести заголовок сообщения, связанного с комментарием.

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