0

我正在使用 Rails 构建一个简单的博客,并且正在遵循普通的 Rails 入门指南 ( http://guides.rubyonrails.org/getting_started.html )。我在我的帖子的 show 方法中设置了一个评论表单,但是当我保存时,它没有将 page_id 保存在评论记录中。

= form_for [@post, @post.comments.build], :remote => true do |f|

  .field
    = f.label :name
    = f.text_field :name
  .field
    = f.label :extra_field, @page.rsvp_extra_field
    = f.text_area :extra_field
  .actions
    = f.submit 'Save'

post.rb

class Post < ActiveRecord::Base

  has_many :comments, dependent: :destroy

  attr_accessible :comments_attributes, :comment_attributes

  accepts_nested_attributes_for :comments, :allow_destroy => true

end

评论.rb

class Comment < ActiveRecord::Base

  belongs_to :post
  attr_accessible :extra_field, :name, :post_id, :phone

end

我在 Rails 控制台中看到它正在发布它,但是NULL为 post_id 放置。有什么想法吗?

编辑

我根本没有改变我的创建方法:

  def create
    @comment = Comment.new(params[:comment])

    respond_to do |format|
      if @comment.save
        format.html { redirect_to post_url, notice: 'Comment was successfully created.' }
        format.json { render json: @comment, status: :created, location: @comment }
      else
        format.html { render action: "new" }
        format.json { render json: @comment.errors, status: :unprocessable_entity }
      end
    end
  end

编辑 2

我认为我的参数是嵌套的,当我不希望它们成为......任何想法如何在“comment”数组中获取这个“post_id”?

Parameters: {"utf8"=>"✓", "authenticity_token"=>"eqe6C7/ND35TDwtJ95w0fJVk4PSvznCR01T4OzuA49g=",
"comment"=>{"name"=>"test", "extra_field"=>""}, "commit"=>"Save", "post_id"=>"8"}
4

1 回答 1

0

因为在你的方法createCommentsController,创建了与对象Comment无关的对象Posthas_many关系为相关对象提供了 3 种方法:

post.comments.create
post.comments.create!
post.comments.build(eq new method)

添加你的CommentsController这个:

  ...
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
  end
  ...
于 2014-03-26T14:20:54.393 回答