【发布时间】:2014-11-18 14:09:46
【问题描述】:
我已按照 Cocoon 的说明为 has_many 关联创建嵌套表单,但有一件事我似乎无法弄清楚。我可以将现有流派添加到我的项目中,但是在创建全新的流派时,我的流派的参数是不允许的。当我参考我的 Rails 控制台来调试问题时,这是我在更新时收到的消息:
Unpermitted parameters: genre_attributes
奇怪的是我已经允许我的连接表genreships 和我的genre 模型以及我的movie 模型接受它们的嵌套属性但仍然没有运气。在我的movie_params 方法中必须有一些我没有做但无法找到的东西。我确实试图在此方法中允许所有可能的属性,并且完全不知道可能是什么解决方案
模型
class Movie < ActiveRecord::Base
has_many :genreships
has_many :genres, through: :genreships
accepts_nested_attributes_for :genres, :reject_if => :all_blank, :allow_destroy => true
accepts_nested_attributes_for :genreships, :reject_if => :all_blank, :allow_destroy => true
extend FriendlyId
friendly_id :title, use: :slugged
end
class Genreship < ActiveRecord::Base
belongs_to :movie
belongs_to :genre
accepts_nested_attributes_for :genre, :reject_if => :all_blank
end
class Genre < ActiveRecord::Base
has_many :genreships
has_many :movies, through: :genreships
extend FriendlyId
friendly_id :name, use: :slugged
end
电影控制器
def movie_params
params.require(:movie).permit(:title, :release_date, :summary, genreships_attributes: [:id, :genre_id, :_destroy], genres_attributes: [:id, :_destroy, :name])
end
表格
= simple_form_for @movie do |f|
.field
= f.input :title
.field
= f.input :release_date, label: 'Release Date', order: [:month, :day, :year], start_year: 1901
.field
= f.input :summary, as: :text
#genres
= f.simple_fields_for :genreships do |genreship|
= render 'genreship_fields', :f => genreship
= link_to_add_association 'add a genre', f, :genreships
.actions = f.submit 'Save', class: 'btn btn-default'
类型部分
.nested-fields
#genre_from_list
= f.association :genre, :collection => Genre.order(:name), :prompt => 'Choose an existing genre'
= link_to_add_association 'or create a new genre', f, :genre
= link_to_remove_association "remove genre", f
类型部分
.nested-fields
= f.input :name
以下是发布新电影后 Rails 控制台中显示的内容:
Started POST "/movies" for 127.0.0.1 at 2014-11-19 08:17:42 -0500
Processing by MoviesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2/wqXhn/x73AdOOrSo49Q/OPAmrcVk0rLViJJNpIhps=", "movie"=>{"title"=>"", "release_date(2i)"=>"11", "release_date(3i)"=>"19", "release_date(1i)"=>"2014", "summary"=>"", "genreships_attributes"=>{"1416403056574"=>{"genre_attributes"=>{"name"=>"Comedy"}, "genre_id"=>"", "_destroy"=>"false"}}}, "commit"=>"Save"}
Unpermitted parameters: genre_attributes
【问题讨论】:
-
乍一看,这正是我在demo-project 中的做法,所以这应该可以。嗯,你能告诉我们发布到控制器的内容吗?
-
@nathanvda 更新了我的问题以显示我的控制台中发生了什么。如果还需要什么,请告诉我。
标签: ruby-on-rails forms parameters nested-forms cocoon-gem