4

コメントの多いページがあります。多くのユーザーがこのページにアクセスしてコメントを送信できます。プライベートな別のページのコメントを表示します。

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からアクセス可能)を持っている必要があります。

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 に答える