コメントの多いページがあります。多くのユーザーがこのページにアクセスしてコメントを送信できます。プライベートな別のページのコメントを表示します。
models / page.rb
class Page < ActiveRecord::Base
has_many :comments, :dependent => :destroy
accepts_nested_attributes_for :comments, :allow_destroy => true
end
models / 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 %>
controllers / 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| %>
そうすると、1つのコメントが何であるかがわからず、複数のコメントのみを処理したいため、エラーがスローされます。
基本的に、ユーザーは、多くのコメントがあるページに1つのコメントを送信し、それをページに自動的に関連付けることができる必要があります。二次的なこととして、コメントに関連付けられたユーザーのID(Deviseを介してcurrent_user.idからアクセス可能)を持っている必要があります。