所以我遇到了一些强大的参数和嵌套形式的问题(太惊讶了!在大声笑之前没有人遇到过这个问题)而且我一直在寻找几个线程,尝试不同的解决方案但仍然可以&#39 ; t得到一个嵌套属性,所以我转向你,其他程序员。首先让我们看一下代码,好吗?如果你发现任何可疑的东西,请告诉我!
Aventure.rb
class Adventure < ActiveRecord::Base
belongs_to :user
has_many :photos
has_many :reservations
has_many :activity_dates
accepts_nested_attributes_for :activity_dates
...
end
Activity_date.rb
class ActivityDate < ActiveRecord::Base
belongs_to :adventure
has_many :time_slots
accepts_nested_attributes_for :time_slots
end
Timeslot.rb
class TimeSlot < ActiveRecord::Base
belongs_to :activity_date
end
_form.hmtl.erb
<%= form_for @adventure, html: {multipart: true} do |f| %>
...
<%= f.fields_for :activity_dates, @adventure.activity_dates.new do |a| %>
<%= a.date_field :date %>
<%= a.hidden_field :adventure_id, value: @adventure.id %>
<% end %>
adventure_controller.erb
def adventure_params
params.require(:adventure).permit(:activity_name,:description,:leader,
:company_name,:adress,:max_perticipants,
:price,:currency,{:activity_dates=>[:dates]})
end
是的,所以当我检查下面的参数时,我得到了这些 hashes(参见img链接):
render json: { p: params.inspect, ad:adventure_params.inspect }
我得出结论,activity_dates显示在params中,但不在ad:adventure_params中。使用params [:activity_dates]会产生ForbiddenAttributesError,这是预期的。这不是一个很好的方法,因为在强大的参数中是不允许的。但是我想得到:activity_dates包含它的属性日期,以及后来甚至它的嵌套属性:timeslots。但无论我看到多少解决方案,我都没有得到预期的结果。我究竟做错了什么?帮助我欧比旺,你是我唯一的希望!
答案 0 :(得分:1)
对于嵌套属性,当您将其添加到强参数时,需要将“_attributes”添加到字段名称的末尾,因此您需要允许activity_dates
为activity_dates_attributes
,如下所示:
params.require(:adventure).permit(:activity_dates_attributes=>[:dates])
或其他允许的参数如下:
params.require(:adventure).permit(:activity_name,:description,:leader,
:company_name,:adress,:max_perticipants,
:price,:currency, :activity_dates_attributes=>[:dates])
有关白名单强参数的详细信息,请点击此处的一些有用链接:http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html https://github.com/rails/strong_parameters/