私は最初の多型のアソシエーション関係に取り組んでおり、私のform_forのコメントをリファクタリングするのに問題があります。リファクタリングForm_for多態性のあるアソシエーションのコメントのメソッドの作成
多形性協会RailsCast http://railscasts.com/episodes/154-polymorphic-association?view=asciicastを試しましたが、日付が付いているようです。それはcommentable何のために働くだろうように
どのように私は私のcomment_formは部分書き換えます:
私は2つの質問がありますか?今のところ、それは
(:commentable_id => @traveldeal.id)
からtraveldealsのためだけに働くでしょう。コメントを作成するとき、commentable_typeは空です。 commentable_typeとは何ですか?フォームに渡す必要がありますか?
ありがとう!
user.rb
class User < ActiveRecord::Base
has_many :comments, :dependent => :destroy
end
traveldeal.rb
class Traveldeal < ActiveRecord::Base
has_many :comments, :as => :commentable, :dependent => :destroy
end
comment.rb
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :commentable, :polymorphic => true
validates :user_id, :presence => true
validates :commentable_id, :presence => true
validates :content, :presence => true
end
traveldeal_show.html.erb
<%= render 'shared/comment_form' %>
_comment_form.html.erb
<%= form_for current_user.comments.build(:commentable_id => @traveldeal.id) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div>
<%= f.text_area :content %>
</div>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :commentable_id %>
<div>
<%= f.submit "Add Comment" %>
</div>
<% end %>
comments_controller.rb
class CommentsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
def create
@comment = Comment.new(params[:comment])
@comment.save
redirect_to root_path
end
end
私はこのミスチャを手伝ってくれてありがとう。あなたの回答が示されているように、ショーページのための@commentableを設定することに失敗しました。 – Huy
[@commentable、Comment.new]のパラメータは何ですか?この文脈で「コメント。新」が何を意味するのかよく分かりません。コントローラーで見るときと似た新しいレコードを作成するだけですか? – Huy
あなたはネストされたルートを持っているので、あなたの 'form_for'には2つのオブジェクトが必要です。最初のものは、コメントが属するオブジェクト( '@ commentable')、2番目は新しいコメントオブジェクト(' Comment.new')です。そうです、コントローラーに新しいレコードを作成するのと同じです。コントローラーで '@comment = Comment.new'を実行することもできますが、コメントフォームがある場所ならどこでも実行する必要があります。ビュー内で 'Comment.new'を行うだけで、よりクリーンです。 – Mischa