Rails:多层嵌套表单(接受嵌套属性)



我正在创建一个简单的博客级应用程序。以下是我的模型。

class User < ActiveRecord::Base
  attr_accessible :name,:posts_count,:posts_attributes , :comments_attributes
  has_many :posts
  has_many :comments
  accepts_nested_attributes_for :posts , :reject_if => proc{|post| post['name'].blank?}  , :allow_destroy => true
end

class Post < ActiveRecord::Base
  attr_accessible :name, :user_id ,:comments_attributes
  belongs_to :user
  has_many :comments
  accepts_nested_attributes_for :comments
end
class Comment < ActiveRecord::Base
  attr_accessible :content, :post_id, :user_id
  belongs_to :user
  belongs_to :post  
end

我试图通过使用rails的accepts_nested_attributes_for功能来创建用户,帖子和评论。下面是我的控制器和视图代码。

控制器 -----------

class UsersController < ApplicationController
  def new
    @user = User.new
    @post = @user.posts.build
    @post.comments.build
  end
  def create
   @user = User.new(params[:user])
   @user.save
  end
end

形式 ----------

<%= form_for @user do |f| %>
    <%= f.text_field :name %>
    <%= f.fields_for :posts do |users_post| %>
        <br>Post
        <%= users_post.text_field :name  %>
        <%= users_post.fields_for :comments do |comment| %>
             <%= comment.text_field :content %>
         <% end %>
    <% end %>
    <%= f.submit %>
<% end %>

使用上面的代码,我成功地创建了新用户,帖子和评论,但问题是我无法将新创建的用户分配给新创建的评论。当我检查新创建的评论到数据库中时,我得到了下面的结果。我得到user_id字段值为"nil"。

#<Comment id: 4, user_id: nil, post_id: 14, content: "c", created_at: "2014-05-30 09:51:53", updated_at: "2014-05-30 09:51:53">

所以我只是想知道我们如何将新创建的评论分配给新创建的用户??

谢谢,

您必须显式地为注释分配user_id !你是在posts下嵌套评论,所以默认情况下评论会有post_id分配,但是虽然你是间接地在user表单下嵌套评论,但在user表单下没有直接嵌套评论,所以user_id在评论中保持空白。

尝试在Comment模型中创建回调后写入user_id

在comment.rb

after_create{|comment|
  comment.user_id = post.user_id
  comment.save
}

希望这对你有帮助

相关内容

  • 没有找到相关文章

最新更新