Имейте форму создания в индексе по моделям - PullRequest
0 голосов
/ 22 июля 2011

Я хочу спросить, является ли то, что я сделал, хорошей практикой.

У меня есть две модели: обсуждение имеет много сообщений .

В моих обсуждениях # show отображаются все сообщения. Теперь я хочу добавить форму, чтобы я мог создать новый пост на этом обсуждении.

Discussions_controller.rb show ()

@discussion = Discussion.find(params[:id])
@post = @discussion.posts.build

show.html.erb

<%= render :partial => 'posts/form' %>
<%= render @discussion.posts %>
<%= link_to 'Edit', edit_discussion_path(@discussion) %> |
<%= link_to 'Back', discussions_path %>

_post.html.erb

<div class="post">    
  <p>
    <b>Content:</b>
    <%= post.content %>
  </p>
  <%= link_to 'Edit', edit_post_path(post) %> |
  <%= link_to 'Back', posts_path %>
</div>

Это вызовет ошибку в методах link_to 'edit' и 'back', потому что новый объект записи, который я построил, станет частью @discussion.posts, и поскольку это новое сообщение не является сохраненный, помощник url ​​edit_post_path выдаст «Не найдено ни одного маршрута» ошибка (невозможно найти несохраненный пост).

Если я хочу сохранить методы link_to для редактирования и возврата, я должен отфильтровать вновь созданный (но не сохраненный) объект. Но почему-то я чувствую, что то, что я сделал, может быть хакерским, и хочу спросить, есть ли лучшая практика для достижения моей цели.

1 Ответ

1 голос
/ 22 июля 2011

Если вам не нужно discussion_id при отправке новой формы Post, тогда вы можете просто сделать

@post = Post.new

Если вам нужно discussion_id установить на новом Postобъект, то вы можете сделать это без добавления нового объекта в @discussion.posts

@post = Post.new(:discussion => @discussion)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...