我是Ruby的新手,我试图在显示页面上显示评论,但是当我创建评论时,它不会显示。我已经在我的显示页面上渲染了一部分,以便显示评论,但它们不会出现。
奇怪的是,create动作有效,但它带我到此页面:http://localhost:3000/hairstyles/2/comments
上面没有任何内容(在我的应用程序中,此页面位于views> comments> create.html.erb下)想要转到发型的查看页面并显示评论。...
如果有人可以提供帮助,看看我的代码中是否有任何错误,我将不胜感激。预先感谢。
评论控制器:
class CommentsController < ApplicationController
def new
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@comment = Comment.new
end
def create
@comment = Comment.new(comment_params)
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@comment.save
end
def destroy
end
end
private
def comment_params
params.require(:comment).permit(:content)
end
要在其中显示评论的发型查看页面:
<div class="container">
<div>
<%= cl_image_tag @hairstyle.photo, width: 300, height: 200, crop: :fill %>
<h1><%= @hairstyle.name %></h1>
<p><%= @hairstyle.description%></p>
<p><%= @hairstyle.category%></p>
<p><%= @hairstyle.video_url %></p>
</div>
</div>
<div>
<%= link_to 'Back', hairstyles_path %>
</div>
<h6>Comments for: <%= @hairstyle.name %> <small><%= %></small></h6>
<h2>
<%= pluralize @hairstyle.comments.size, "comment" %>
</h2>
<div id="comments">
<% if @hairstyle.comments.blank? %>
Be the first to leave a comment for <%= @hairstyle.name %>
<% else %>
<% @hairstyle.comments.each do |comment| %>
<%= render 'comments/show', comment: comment %>
<% end %>
<% end %>
</div>
<%= render 'comments/form', comment: @comment %>
我正在渲染的评论表格可以工作并显示: views> comments> _form.html.erb
<div class="flex-box">
<%= simple_form_for([ @hairstyle, comment ]) do |form| %>
<%= form.input :content, as: :text %>
<%= form.button :submit %>
<% end %>
</div>
注释我正在渲染的内容,一旦在显示页面上为发型添加注释,便不会显示:
views>评论> _show.html.erb
<p><%= comment.content %></p>
答案 0 :(得分:0)
rails控制器的默认行为是在创建方法之后它将重定向到索引页面。这就是为什么您被重定向到该路径。
您可以像下面这样在注释控制器中的redirec_to
方法中简单地使用create
def create
@comment = Comment.new(comment_params)
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@comment.save
redirect_to hairstyle_path(@comment.hairstyle)
end
答案 1 :(得分:0)
您永远不会将评论链接到发型,评论中的hairstyle_id
是nil
,这就是@hairstyle.comments
返回空数组的原因
def create
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@comment = @hairstyle.comments.build(comment_params)
# equivalent to:
# comment = Comment.new(comment_params)
# comment.hairstyle = @hairstyle
if comment.save
redirect_to hairstyle_path(@hairstyle)
else
# handle errors
end
end