我有一个设置,我希望能够建立一个角色记录,指向用户技能,场地,制作,群组等。
我把它设置为与一切事物有很多关系,因为角色和角色属于所有事物:
class Role < ApplicationRecord
belongs_to :user
belongs_to :skill
belongs_to :production
belongs_to :venue
belongs_to :project
belongs_to :group
end
并将各个角色类别设置为:
class Group < ApplicationRecord
has_many :users, through: :roles
end
除了用户之外,所有都是相同的,当然这些用户对模型有很多细节。
每个表都有一个名称字段,一个id字段和标准时间戳字段。
我将其设置为索引每个表的名称。
当我尝试使用role_id,user_id和skill_id构建一个角色作为记录时,我在控制台中找回错误,说我需要所有内容的值。
这是否意味着我必须为每种类型的角色建立一个has_many through关系,并且它自己的“通过”?或者可以通过我想象的时尚工作来完成工作吗?为什么要尝试验证每个字段的数据是否存在?是因为索引?
如果我想关闭该验证,我甚至不确定将代码放在何处,因为我不确定验证的来源。
答案 0 :(得分:1)
Rails 5 belongs_to的默认行为是父关联必须存在,所以是的,您需要所有字段才能保存角色。
但是,要关闭此行为,请更改为:
# config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = false
# this would disable this configuration for the entire application
<强>更新强>
另一种方法是找出最重要的关联并确保它们可用,并在可选关联上设置可选标记,如下所示:
class Role < ApplicationRecord
belongs_to :user
belongs_to :skill, optional: true # assume skill & production are optional
belongs_to :production, optional: true
belongs_to :venue
belongs_to :project
belongs_to :group
end