【问题标题】:Strong parameters not whitelisting attributes with simple_form强参数不使用 simple_form 将属性列入白名单
【发布时间】:2016-04-11 16:24:29
【问题描述】:

我在理解如何嵌套 3 个模型时遇到了一些问题。我试图在关系的最深处,将Video 添加到WorkoutSteps(不是创建新视频,而是从下拉列表中选择现有视频)

型号:

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

检查参数:

【问题讨论】:

    标签: ruby-on-rails simple-form strong-parameters


    【解决方案1】:

    仅供参考,正如我在上面的评论中所说,问题已解决。

    params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ {main_video_ids: []} ]])
    

    更多信息,check this link

    【讨论】:

      【解决方案2】:

      main_video_ids 是一个数组属性,而不是ids 的哈希值。所以你可以直接将其列入白名单:

      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
      

      【讨论】:

      • 没用 - 虽然,找到了将ids 列入白名单的方法,但仍然没有创建模型params.require(:workout).permit(:title, :pro, :workout_step_id, workout_sets_attributes: [ :id, :_destroy, :title, workout_steps_attributes: [ {main_video_ids: []} ]])
      • 谢谢,更新了我的答案。你得到正确的参数了吗?也许这是一个验证问题?如果你这样做@workout.valid?,你会得到什么
      • true - 此外,调试内容似乎一切就绪,只是保存步骤。 imgur.com/BWxv5d6
      • 我真的不想认为它正在尝试创建一个新的Video 模型并且无法保存
      • 仅供参考,已解决 - 更深入地调试可以解决问题,但问题却很模糊
      猜你喜欢
      • 2015-05-31
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多