【发布时间】:2013-06-14 03:02:28
【问题描述】:
我有一个嵌套属性,我可以显示值,但它没有保存到数据库中,为什么?
我有一个模型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
cmets 迁移文件
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
这是表格
<%= form_for [@reviewable, @review], :html => {:multipart => true} do |f| %>
<%= f.fields_for :comments, @review.comments.build do |field| %>
<%= field.label "Comment" %></div>
<%= field.text_field :content %>
<% end %>
<%= f.submit %>
<% end %>
显示字段,但是我保存时怎么不保存?
我尝试这样显示:
<%= @review.comments %>
这是我的审核控制器
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
【问题讨论】:
-
请在您的控制器中发布
create方法 -
@muttonlamb 你好!我已经编辑了我的帖子以包含 create 方法。有什么问题吗?谢谢!
-
我看不出有什么问题。如果可能的话,你能分享你的代码吗,我的意思是使用任何公共回购?
-
您也可以尝试检查日志,那里发生了什么,您保存评论时是否创建了任何评论?
-
@Muntasim 似乎它正在被提交到数据库中,但它没有保存到评论数据库中,从我的日志中有一个
insert into "reviews"和另一个insert into "comments"
标签: ruby-on-rails ruby-on-rails-3.2 nested-attributes