如何使用简单的表单来嵌套资源的注释?

时间:2015-03-01 09:10:55

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

所以我正在创建一个博客rails应用程序,我试图在博客上创建一个评论会话。我试图使用简单的表单渲染表单,但我很难让简单的表单工作。现在我有:

<%= simple_form_for ([@user, @post.comments.build]) do |f| %>
  <%= f.input :comment %>
  <%= f.button :submit %>
<% end %>

但是它说post.com并不是一条定义的路径。

我的评论模型:

class Comment < ActiveRecord::Base
  belongs_to :post
  belongs_to :user
end

帖子属于user和has_many条评论 用户有很多帖子,有很多评论

以下是我目前的路线:

  resources :posts do
    resources :comments 
  end

有什么建议吗? 谢谢!

3 个答案:

答案 0 :(得分:1)

为什么要在simple_form_for中发送@user?
使用@post代替@user

答案 1 :(得分:1)

从表单中删除用户。

<%= simple_form_for [@post, @post.comments.build] do |f| %>
  <%= f.input :comment %>
  <%= f.button :submit %>
<% end %>

然后,如果您使用的是设计,则将使用类似current_user的内容在控制器中分配用户值。

def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.build(comment_params)
   @comment.user = current_user
   @comment.save
   redirect_to @post
end

def comment_params
  params.require(:comment).permit(:comment)
end

将名为comment的模型和名为comment的字段放入其中是一个坏主意。我更愿意称之为content

答案 2 :(得分:1)

我通过为评论生成迁移找到了解决方法。我只需要确保具有关联的所有内容实际上都具有数据库中的列。之后我确定我正在渲染@ post.com而不是评论/评论。希望这可以帮助遇到同样问题的任何人。