「Topic」というモデルを親として、「Comment」というモデルを子として持っているとします。URL 'topics/show/35' で、このトピック ID#35 に属するすべてのコメントを見ることができます。
ログインしたユーザーがこのページに新しいコメントを投稿したい場合、topics_controller.rb に「comment_create」アクションを記述する必要がありますか? または、comments_controller.rb に 'create' アクションを記述して、このページから呼び出しますか? どれが通常の方法ですか??
comments_controller で「作成」アクションを呼び出した場合、どのようにビューに書き込んで渡すことができますか?
- コメントを追加する「モデル名」
- 「モデル ID 番号」
- 「コメント本文」
または、このようにアクションを個別に記述する必要がありますか?
controllers/comments_controller.rb
def create_in_topic
code here! to add new comment record that belongs to topic....
end
def create_in_user
code here! to add new comment record that belongs to user....
end
参考までに、コメント追加アクションは次のようになります。
def create
@topic = Topic.find(params[:topics][:id] )
@user_who_commented = current_user
@comment = Comment.build_from( @topic, @user_who_commented.id, params[:topics][:body] )
@comment.save
redirect_to :back
flash[:notice] = "comment added!"
end
例が更新されました!!!
ビュー/トピック/show.html.erb
<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>Body</th>
<th>Subject</th>
<th>Posted by</th>
<th>Delete</th>
</tr>
<% @topic.comment_threads.each do |comment| %>
<tr>
<td><%= comment.id %></td>
<td><%= comment.title %></td>
<td><%= comment.body %></td>
<td><%= comment.subject %></td>
<td><%= comment.user.user_profile.nickname if comment.user.user_profile %></td>
<td> **Comment destroy method needed here!!!** </td>
</tr>
<% end %>
</table>
<%=form_for :topics, url: url_for( :controller => :topics, :action => :add_comment ) do |f| %>
<div class="field">
<%= f.label :'comment' %><br />
<%= f.text_field :body %>
</div>
<%= f.hidden_field :id, :value => @topic.id %>
<div class="actions">
<%= f.submit %>
<% end %>
コントローラー/topics_controller.rb
def add_comment
@topic = Topic.find(params[:topics][:id] )
@user_who_commented = current_user
@comment = Comment.build_from( @topic, @user_who_commented.id, params[:topics][:body] )
@comment.save
redirect_to :back
flash[:notice] = "comment added!"
end