【问题标题】:Self association with accepted nested attributes与接受的嵌套属性的自关联
【发布时间】:2020-02-11 10:13:35
【问题描述】:
class Employee < ApplicationRecord
  has_many :subordinates, class_name: "Employee", foreign_key: "manager_id"
  belongs_to :manager, class_name: "Employee", optional: true
  accepts_nested_attributes_for :subordinates
end

如何在控制器中为上述深层嵌套关联创建employee_params。

def employee_params
  params.require(:employee).permit(:name, :roll_no, subordinates_attributes: [:name, roll_no, :subordate_attributes:[]......])
end

【问题讨论】:

  • 澄清一下,从用户体验的角度来看......最终用户创建多个员工并在将整个事情提交并提交到服务器之前将他们相互分配?我不禁觉得这使 UI 过于复杂......你将如何处理验证错误......等等
  • 我没有使用它来创建员工。其目的不同。
  • 好吧,同样的问题仍然存在......只需将我的评论中的employee 替换为您尝试创建的任何内容。只是试图帮助澄清目的,因为在这种情况下删除accepts_nested_attributes_for和permit(:name, :roll_no, :manager_id, subordinate_ids: [])似乎会更简单。

标签: ruby-on-rails associations


【解决方案1】:

只需传递一个哈希作为数组的最后一个元素,以允许嵌套属性数组:

def employee_params
  params.require(:employee).permit(
     :name, :roll_no, 
     subordinates_attributes: [
       :name, :roll_no, 
       subordinates_attributes: [:name, :roll_no]
     ]
  )
end

这个语法看起来很奇怪,但从[1, 2, 3, foo: :bar] == [1, 2, 3, {:foo=&gt;:bar}]开始就可以使用了。

【讨论】:

  • @David 在他的 cmets 中出现了。巨型表格会造成巨大的混乱和糟糕的用户体验。如果您只是选择现有记录,则不需要嵌套属性。
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2014-01-08
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多