嵌套属性不保存在数据库中? 不显示值 – Ruby on Rails

我有一个嵌套属性,我可以显示值,但它不保存到数据库中为什么?

我有一个模型review ,我想嵌套属性comments

查看迁移文件

 class CreateReviews < ActiveRecord::Migration def change create_table :reviews do |t| t.belongs_to :reviewable, polymorphic: true t.timestamps end add_index :reviews, [:reviewable_id, :reviewable_type] end end 

审查模型

 class Review < ActiveRecord::Base attr_accessible :rating, :user_id, :comments_attributes, :service has_many :comments, as: :commentable belongs_to :user belongs_to :reviewable, polymorphic: true accepts_nested_attributes_for :comments end 

评论迁移文件

 class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.text :content t.belongs_to :commentable, polymorphic: true t.integer :user_id t.timestamps end add_index :comments, [:commentable_id, :commentable_type] end end 

评论模型

 class Comment < ActiveRecord::Base attr_accessible :content, :user_id belongs_to :commentable, polymorphic: true belongs_to :user belongs_to :review end 

这是表格

  {:multipart => true} do |f| %>  

它显示了字段,但是为什么我保存,它不保存?

我试着像这样显示:

  

这是我的评论控制器

  def new @review = @reviewable.reviews.new @review.comments.build end 

谢谢你的帮助!

编辑:

检查控制器:创建方法

  def create @review = @reviewable.reviews.new(params[:review]) @review.user = current_user if @review.save redirect_to @reviewable, notice: "review created." else render :new end end 

您的控制器和视图中似乎存在一些混乱的逻辑

  def new @review = @reviewable.reviews.new @review.comments.build end 

在这里,您正在调用@reviewable.reviews.new @reviewable ,但@reviewable尚不存在。 调用它的更通常的方法是Review.new

接下来在您的视图中执行此操作

 <%= form_for [@reviewable, @review], :html => {:multipart => true} do |f| %> <%= f.fields_for :comments, @review.comments.build do |field| %> 

这是将@reviewable@review传递给form_for 。 这看起来很奇怪。 通过嵌套,您通常只需要传递顶级实例变量,即@review

接下来,当你到达fields_for你正在传递:comments@review.comments.build 。 一般来说,这应该只需要:comment ,因为你已经在控制器中构建了注释。

我建议您查看这两个截屏video

http://railscasts.com/episodes/196-nested-model-form-part-1 http://railscasts.com/episodes/197-nested-model-form-part-2

还有一些gem可以很好地处理整个制作过程中可评论的过程,它们可以在这里找到

https://www.ruby-toolbox.com/categories/rails_comments

我认为可评价的gem路径更好,因为它们正在由更大的社区进行工作,我认为从长远来看,最终会比个人创作更好。

希望这可以帮助…

你需要更换以下内容

 <%= f.fields_for :comments, @review.comments.build do |field| %> 

 <%= f.fields_for :comments, @review.comments do |field| %> 

在表单中查看已创建的评论。 正如你在新行动中有@review.comments.build 。 否则,您无法看到关于编辑审核的相关注释