当嵌套属性深达2级时从控制器获取参数

时间:2018-09-24 08:09:20

标签: ruby-on-rails nested-attributes strong-parameters

我的Pack模型包含行,行又包含项,而pack和line都接受它们包含的集合的嵌套属性。

以下是模型:

Class Pack < ApplicationRecord
   has_many :pack_lines, dependent: :destroy
   accepts_nested_attributes_for :pack_lines, allow_destroy: true
end

Class PackLine < ApplicationRecord
   belongs_to :pack
   has_many :pack_line_items, dependent: :destroy
   accepts_nested_attributes_for :pack_line_items, allow_destroy: true
end

Class PackLineItem < ApplicationRecord
   belongs_to :pack_line
end

我花了很长时间找到合适的语法来permit用于控制器中的嵌套嵌套参数。

2 个答案:

答案 0 :(得分:0)

经过大量的草稿和文档阅读之后,我想到了以下内容:

# In controllers/packs_controller.rb
def pack_params
   params.require(:pack).permit(
      :name,
      pack_lines_attributes: [
         :id,
         :_destroy,
         {
           pack_line_items_attributes: [
             :id,
             :_destroy
           ]
         }
      ]
   )
end

希望有帮助!

答案 1 :(得分:0)

您可以允许这样的嵌套属性。

select count(distinct start)
from 
(
select start,max(case when current is not null then 1 else 0 end) mt
from data
group by start)a where mt=0

它们对于params.require(:pack).permit( :name, pack_lines_attributes: [ :id, :_destroy, pack_line_items_attributes: [ :id, :_destroy ] ] ) has_many的工作方式相似。对于has_one,例如has_one

,您可能必须单数化