对我来说,这是一个奇怪的。
我有2个模特(有用户),我有帖子,我有评论。 我想要做的是在帖子#show视图中有form_for评论。
但是出于某些原因,当我尝试创建评论时,我发现无法找到没有ID的帖子。 当我查看请求参数时,我看到:
{"utf8"=>"✓", "authenticity_token"=>"7bAXF66sghTKAF7b61gu08hElC+O1nR6RoT92tqQGOI=", "comment"=>{"content"=>"ok"}, "commit"=>"Add comment", "action"=>"create", "controller"=>"comments", "post_id"=>"23"}
这清楚地表明它实际上确实得到了post_id,并且在这种情况下它是23的id。
经过无数个小时,我以为我能看出你们是否有解决方案。
我的 comments_controller.rb :
class CommentsController < ApplicationController
before_action :load_post
def create
@comment = @post.comments.build(params[:content])
@comment.user = current_user
if @comment.save
@comment.create_activity :create, owner: current_user
redirect_to root_url, notice: "Comment was created."
else
render :new
end
def load_post
@post = Post.find(params[:id])
end
end
我的 posts_controller.rb
def show
@post = Post.find(params[:id])
@comment = Comment.new
end
表单 comments / _form.rb
的部分内容<%= form_for [@post, @comment] do |f| %>
<%= f.text_area :content %>
<%= f.submit "Add comment" %>
<% end %>
我的 routes.rb
resources :posts do
resources :comments
end
我的帖子/ show.html.erb
<%= render @post %>
<h3>New comment</h3>
<%= render 'comments/form' %>
我的帖子/ _post.html.erb
<h2><%= @post.title %></h2>
<p><%= @post.content %></p>
<em>written by <%= @post.user.fullname %></em>
答案 0 :(得分:3)
您收到的"post_id"
不是"id"
您可以将load_post
操作设为私有,以解决安全问题
private
def load_post
@post = Post.find(params[:post_id])
end
访问content
之类的
def create
@comment = @post.comments.build(params[:comment][:content])
....