强参数不使用 simple_form 将属性列入白名单
Strong parameters not whitelisting attributes with simple_form
我在理解如何嵌套 3 个模型时遇到一些问题。我正在尝试,在关系的最深处,将 Video
添加到 WorkoutSteps
(不是创建新视频,而是 select 下拉列表中的现有视频)
型号:
Workout
WorkoutSet
WorkoutStep
-> 只是一个 Video
的数组
Video
关系
锻炼:
has_and_belongs_to_many :workout_sets, :join_table => :workout_sessions, dependent: :destroy
锻炼集
has_and_belongs_to_many :workout_steps, :join_table => :sets_steps, dependent: :destroy
锻炼步骤
has_and_belongs_to_many :workout_sets, :join_table => :sets_steps
以及以下观点:
_form.html.haml
= simple_form_for(@workout, url: admin_workouts_path(@workout)) do |f|
= f.input :title
%h3 Sets
.sets.some{ :style => "margin-left: 25px" }
= f.simple_fields_for :workout_sets do |set|
= render 'workout_set_fields', f: set
.links
= link_to_add_association 'add set', f, :workout_sets
= f.submit
_workout_set_fields
= f.label :title
= f.text_field :title
%br
%br
#sets.some{ :style => "margin-left: 25px" }
= f.simple_fields_for :workout_steps do |step|
= render 'workout_step_fields', f: step
.links
= link_to_add_association 'add step', f, :workout_steps
_workout_step_fields
= f.association :main_videos, include_hidden: false
workouts_controller.rb
def workout_params
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ main_video_ids: [:id] ] ])
end
正在检查参数:
main_video_ids
是数组属性,不是 id
的散列。所以可以直接白名单:
def workout_params
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: main_video_ids: [] ] ])
end
仅供参考,问题已按照我在上面的评论中所述解决。
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ {main_video_ids: []} ]])
欲了解更多信息,check this link
我在理解如何嵌套 3 个模型时遇到一些问题。我正在尝试,在关系的最深处,将 Video
添加到 WorkoutSteps
(不是创建新视频,而是 select 下拉列表中的现有视频)
型号:
Workout
WorkoutSet
WorkoutStep
-> 只是一个 Video
的数组
Video
关系
锻炼:
has_and_belongs_to_many :workout_sets, :join_table => :workout_sessions, dependent: :destroy
锻炼集
has_and_belongs_to_many :workout_steps, :join_table => :sets_steps, dependent: :destroy
锻炼步骤
has_and_belongs_to_many :workout_sets, :join_table => :sets_steps
以及以下观点:
_form.html.haml
= simple_form_for(@workout, url: admin_workouts_path(@workout)) do |f|
= f.input :title
%h3 Sets
.sets.some{ :style => "margin-left: 25px" }
= f.simple_fields_for :workout_sets do |set|
= render 'workout_set_fields', f: set
.links
= link_to_add_association 'add set', f, :workout_sets
= f.submit
_workout_set_fields
= f.label :title
= f.text_field :title
%br
%br
#sets.some{ :style => "margin-left: 25px" }
= f.simple_fields_for :workout_steps do |step|
= render 'workout_step_fields', f: step
.links
= link_to_add_association 'add step', f, :workout_steps
_workout_step_fields
= f.association :main_videos, include_hidden: false
workouts_controller.rb
def workout_params
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ main_video_ids: [:id] ] ])
end
正在检查参数:
main_video_ids
是数组属性,不是 id
的散列。所以可以直接白名单:
def workout_params
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: main_video_ids: [] ] ])
end
仅供参考,问题已按照我在上面的评论中所述解决。
params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ {main_video_ids: []} ]])
欲了解更多信息,check this link