4

我有一个有很多评论的页面。许多用户可以访问此页面并提交评论。我在另一个不公开的页面上查看评论。

模型/page.rb

class Page < ActiveRecord::Base
  has_many :comments, :dependent => :destroy 
  accepts_nested_attributes_for :comments, :allow_destroy => true
end

模型/comment.rb

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

views/pages/show.html.erb 相关部分

<%= form_for @page, :remote => true do |f| %>
    <% f.fields_for :comments do |builder| %>
   <%= builder.text_area :content, :rows => 1 %>
   <%= builder.submit "Submit" %>
    <% end %>
<% end %>

控制器/pages_controller.rb

def show
  @page = Page.find(params[:id])
end

def update
  @page = Page.find(params[:id])
  @page.comments.build
  @page.update_attributes(params[:page])
end

这里的问题是我不想让用户看到多个评论字段。然而,如果我这样做<% f.fields_for :comment do |builder| %>了,它会抛出一个错误,因为它不知道一个评论是什么,而只想处理多个评论。

本质上,用户应该能够在一个页面上提交一条评论,该页面有很多评论,并且自动与页面相关联。作为第二件事,我需要将用户的 id(可通过 Devise 通过 current_user.id 访问)与评论相关联。

4

2 回答 2

9
<% f.fields_for :comments, f.object.comments.build do |fc| %>
  <!-- rest of form -->
<% end %>
于 2012-04-04T20:28:05.560 回答
0

你可以使用嵌套资源吗?基本上在 routes.rb ...

resources :pages do 
  resources :comments 
end     

然后在评论控制器中,您可以通过 page_id 或类似的东西找到页面..不要回忆起头顶上的确切语法..

于 2012-04-04T20:27:21.190 回答