Rails 不使用多态模型保存嵌套形式
Rails doesn't save nested form with polymorphic models
我有这些型号:
class Review < ActiveRecord::Base
belongs_to :reviewable, polymorphic: true
end
class Article < ActiveRecord::Base
has_one :review, as: :reviewable, dependent: :destroy
accepts_nested_attributes_for :review
end
还有这样的表格:
<%= form_for @article do |f| %>
<%= f.fields_for(:review, Review.new) do |r| %>
<%= r.label :content %>
<%= r.text_field :content %>
<% end %>
<%= f.label :description %>
<%= f.text_field :description %>
<% end %>
在我的 ArticlesController
中,我创建了这样简单的文章:
@article = Article.new(article_params)
@article.save
def article_params
params.require(:article).permit(:description, review_attributes: [:id, :content])
end
我做错了什么?谢谢。
尝试添加 accepts_nested_attributes_for
更新:
app/models/article.rb
class Article < ActiveRecord::Base
has_one :review, as: :reviewable, dependent: :destroy
accepts_nested_attributes_for :review
end
app/controllers/articles_controller.rb
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article, notice: "Article created!"
else
render :new
end
end
private
def article_params
params.require(:article).permit(:description, review_attributes: [:content])
end
查看
<%= form_for(@article) do |form| %>
<%= form.fields_for(:review_attributes, @article.build_review) do |review| %>
<%= review.label :content %>
<%= review.text_field :content %>
<% end %>
<%= form.label :description %>
<%= form.text_field :description %>
<% end %>
我有这些型号:
class Review < ActiveRecord::Base
belongs_to :reviewable, polymorphic: true
end
class Article < ActiveRecord::Base
has_one :review, as: :reviewable, dependent: :destroy
accepts_nested_attributes_for :review
end
还有这样的表格:
<%= form_for @article do |f| %>
<%= f.fields_for(:review, Review.new) do |r| %>
<%= r.label :content %>
<%= r.text_field :content %>
<% end %>
<%= f.label :description %>
<%= f.text_field :description %>
<% end %>
在我的 ArticlesController
中,我创建了这样简单的文章:
@article = Article.new(article_params)
@article.save
def article_params
params.require(:article).permit(:description, review_attributes: [:id, :content])
end
我做错了什么?谢谢。
尝试添加 accepts_nested_attributes_for
更新:
app/models/article.rb
class Article < ActiveRecord::Base
has_one :review, as: :reviewable, dependent: :destroy
accepts_nested_attributes_for :review
end
app/controllers/articles_controller.rb
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article, notice: "Article created!"
else
render :new
end
end
private
def article_params
params.require(:article).permit(:description, review_attributes: [:content])
end
查看
<%= form_for(@article) do |form| %>
<%= form.fields_for(:review_attributes, @article.build_review) do |review| %>
<%= review.label :content %>
<%= review.text_field :content %>
<% end %>
<%= form.label :description %>
<%= form.text_field :description %>
<% end %>