Rails has_many在单独的表单/视图中嵌套属性

时间:2012-11-27 13:45:54

标签: ruby-on-rails forms nested-attributes

我找到了很多关于如何构建多模型表单和多模型显示的示例。但是,如果我想要单独的表格和显示怎么办?

post.rb:

class Post < ActiveRecord::Bas
  has_many :comments, dependent: :destroy
  attr_accessible :comments_attributes
  accepts_nested_attributes_for :comments
end

comment.rb:

class Comment < ActiveRecord::Base
  belongs_to :post
end

posts_controller.rb:

def new
  @post = Post.new
  @post.comments.build
  ...
end

routes.db:

resources posts do
  resources comments
end

我在帖子索引中有一个发布评论索引的链接:

视图/帖/ index.html.erb:

...
<%= link_to 'Comments', post_comments_path(post) %>
...

发布和评论每个都有自己的脚手架生成形式(不是嵌套)。

<%= form_for(@post) do |f| %>
...

<%= form_for(@comment) do |f| %>
...

在评论索引中,我循环发表评论:

视图/评论/ index.html.erb:

<% @post = Post.find(params[:post_id]) %>  //works fine  
<% @post.comments.each do |comment| %>
...
<% end %>

然而,在添加新评论后(在特定帖子ID下)帖子评论索引中的表格为空!

请帮忙。 谢谢:))

1 个答案:

答案 0 :(得分:1)

我明白了。

在评论表格中应该是:

<%= form_for([@post, @comment]) do |f| %>
...

路径应该像:

post_comments_path(@post)
edit_post_comment_path(@post,@comment)

在评论控制器中:

def index
    @post= Post.find(params[:post_id])
    @comments= @post.comments.all
...

def show
    @post= Post.find(params[:post_id])
    @comment= @post.comments.find(params[:id])
...

希望其他人会觉得这很有用!