2011-06-25 16 views
1

アイデアは何百万回も見たことがあります。名前、電子メール、ウェブサイト、メッセージなど、次のフィールドを持つ「新しいコメントを投稿」フォーム:Rails 3 + Devise:新しいコメントフォームにもユーザーモデルフィールドが含まれていますか?

「メッセージ」フィールドはコメントモデルに属し、他の3つはユーザーモデルに属します。 UserモデルはDeviseの検証が可能なので、このハイブリッドフォームでこれらの検証(コメントフィールドの検証と同様)を使用できるようにしたいと考えています。

これは可能ですか? CommentがUserの子ですか?をCommentモデルに追加することはできますか?

ありがとうございます!

+0

ユーザーがサインインしていないときに、ユーザーモデルフィールドを使って何を行う予定ですか? – David

+0

ユーザフィールドは、ユーザがログインしていない場合にのみ表示されます。ログインしている場合は、コメント作成者(ユーザ)がコメントコントローラで「作成」時に割り当てられます。 –

+0

多分私はあなたを誤解します。ユーザーがログインしていない場合は、同じ電子メールを持つユーザーを検索し、コメントの作成者として割り当てますか?もし存在しなければどうですか?または、記事の著者がコメントに割り当てられていることを意味しますか(記事にコメントが投稿されていると仮定します)。 – David

答えて

0

これはあなたが求めている正確に何であるならば、私はわからないんだけど、あなたはこのような何かを行うことができます...コメントのためのあなたのUserモデルで仮想アクセサを作る:

def with_comment 
    if params[:user][:comment] 
    @comment = self.comments.build params[:user][:comment] 
    else 
    @comment = self.comments.build 
    end 
end 

def with_comment=(comment) 
    self.comments.build comment 
end 

その後アプリ/ビュー/ユーザー/登録/ new.html.erbに:

<%= form_for(resource.with_comment(params), 
      :as => resource_name, 
      :url => registration_path(resource_name)) do |f| %> 

    <% f.fields_for :with_comment, resource.with_comment do |cf| %> 
     <% cf.text_area :message %> 
    ... 

私はこれをテストしていませんが、それは私が使用している同様の作業コードから適応されます。

これは実際にコメントが追加されたユーザーフォームです。私はそのことを念頭に置いて、それを戦わないようにしましょう。

関連する問題