假设您将名为“Topic”的模型作为父级,将“Comment”作为子级。 在网址'topics / show / 35'上,您可以看到属于此主题ID#35的所有评论。
登录用户想要在此页面发布新评论时, 我应该在topics_controller.rb中写'comment_create'动作吗? 或者只是在comments_controller.rb中编写'create'动作,并从这个页面调用它? 哪一个是常规方式?
如果我在comments_controller中调用'create'动作,我如何在视图中写入传递
或者我应该像这样单独编写动作?
控制器/ 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
答案 0 :(得分:1)
我认为最直接的实现是在你的主题控制器中的一个动作(即:add_comment)。一旦视图调用TopicController#add_comment操作,您将获得所有主题信息以及注释数据,以便您可以从那里轻松地将注释添加到主题。
如果您需要进一步的帮助,请告诉我。 联邦快递
答案 1 :(得分:0)
嗯,我不确定因为那个宝石,但你可以试试这样的东西:
<%=form_for @topic, url: url_for( :controller => :topics, :action => :add_comment ) do |f| %>
<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| %>
<%= f.fields_for :comment_threads, comment do |comment_form| %>
<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>Delete? <%= comment_form.check_box :_destroy %></td>
</tr>
<% end %>
<% end %>
</table>
<div class="field">
<%= f.label :'comment' %><br />
<%= f.text_field :body %>
</div>
<%= f.hidden_field :id, :value => @topic.id %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
让我知道它是否对你有所帮助!联邦快递