1

私はそのモデルを持ってPosthas_many :commentsます。コメントを投稿するフォームは、投稿とともに に表示されposts/show.html.erbます。comments_controllerコメントの作成を処理する必要があります。グーグルで検索したら出てきた

<%= form_for([@post, Comment.new], :controller => 'comments', :action => 'create') do |f| %>

しかし、これはうまくいきません。これを行うにはどうすればよいですか?

4

1 に答える 1

1
class Post < ActiveRecord::Base
  has_many :comments

  accepts_nested_attributes_for :comments
#...

class Comment < ActiveRecord::Base
  belongs_to :post
#...

次に、フォームで

form_for @post do |f|
  f.fields_for :comments do |c|
    c.text_field :title
    #...
  f.submit

これにより、アクティブなレコードの accept_nested_attributes_for を介して関連付けられたオブジェクトが作成され、個別の comments_controller は必要ありません。投稿の更新中に関連オブジェクトの作成を処理している投稿コントローラーに送信しています。

comments_controller を使用すると、次の 2 つのいずれかを行うことができます。

item_id をパラメータとして comments_controller#new に送信し、アイテムを取得して、そこから新しいコメントを作成します

@post = Post.find(params[:item_id); @comment = @post.comments.build

フォームの非表示フィールドに post_id を入力し、通常どおりコメントを作成します

# in the controller
@comment = Comment.create(params[:comment])

# in the view
form_for @comment do |f|
  f.text_field :title
  #...
  f.hidden_field :post_id, value: @post.id
于 2012-12-06T22:25:23.073 に答える