0

所以我有一个相当典型的博客应用程序,其中包含帖子和评论。

每个评论属于一个帖子 一个帖子可以有很多评论。

基本上我想在帖子的显示操作中添加一个评论表单,而在评论模型中的 attr_accessible 下没有 post_id 。

在我的帖子控制器中,我有:

def show
    @post = Post.find(params[:id])
    @poster = "#{current_user.name} #{current_user.surname} (#{current_user.email})"
    @comment = @post.comments.build( poster: @poster )
  end 

我不完全确定我应该在评论控制器中做什么(如果我说实话,我也不相信上面的代码是正确的)。目前我有:

 def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:post])
  if @comment.save
    redirect_to @post, notice: "Comment posted"
  else
    redirect_to @post, error: "Error!"
  end
end

我的路线:

  resources :comments

  resources :posts do
    resources :comments
  end

最后是表格:

<%= form_for @post.comments.build do |f| %>
        <%= f.label :content, "WRITE COMMENT" %>
        <%= f.text_area :content, rows: 3 %>
        <%= f.hidden_field :post_id, value: @post.id %>
        <%= f.submit "Post" %>
    <% end %>

这里的问题是我无法将我的 post_id 从 posts 控制器的 show 操作传递到 comments 控制器的 create 操作。任何帮助深表感谢。先感谢您!

4

3 回答 3

4

你的帖子控制器看起来不错......但假设你的路线看起来像

resources :posts do
  resources :comments
end

那么你的 CommentsController#create 应该/可能看起来像:

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:comment])
  if @comment.save
    redirect_to @post, notice: "Comment posted"
  else
    redirect_to @post, error: "Error!"
  end
end

你的表格:

<%= form_for [@post, @comment] do |f| %>
    <%= f.hidden_field :poster, value: @poster %>
    <%= f.label :content, "WRITE COMMENT" %>
    <%= f.text_area :content, rows: 3 %>
    <%= f.submit "Post" %>
<% end %>
于 2012-07-23T18:22:53.780 回答
0

您的节目帖子的 URL 应该是post/show/(:id).
现在,在评论表单中,您可以放置​​一个隐藏字段,其值为params[:id]

hidden_field(:post_id, :value => params[:id])

当您提交表单时,您可以使用隐藏字段获取 post_id 的值。

def create
        @comment = Comment.new(params[:comment])
        @comment.post_id = params[:post_id]

        if @comment.save
          flash[:notice] = 'Comment posted.'
          redirect_to post_path(@comment.post_id)
        else
          flash[:notice] = "Error!"
          redirect_to post_path(@comment.post_id)
        end
    end
于 2012-07-23T18:20:03.740 回答
0

我会假设你的帖子模型 has_many comments 和 comment belongs_to post

比你在你的路线文件中你可以做这样的事情

resources :posts do
  resources :comments
end

这将为您提供一个 url 方案,例如

/posts/:post_id/comments ,允许您始终拥有评论parrent的post_id

于 2012-07-23T18:24:12.693 回答