虽然请求参数说我做了,但找不到没有ID的帖子

时间:2014-07-14 11:24:56

标签: ruby-on-rails ruby-on-rails-4

对我来说,这是一个奇怪的。

我有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>

1 个答案:

答案 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]) 
....