提问人:josegp 提问时间:2/6/2023 最后编辑:josegp 更新时间:2/6/2023 访问量:48
添加用于模型创建的验证
Add Validation for Model creation
问:
我有一个 Ruby on Rails 项目,有 3 个模型:用户、组和任务。 这个想法是用户可以位于不同的组中,并且组可以具有不同的用户,因此 member 是连接它们之间的表。
问题是在进行播种时:
puts "Creating Users"
admin_one = User.create!(email: "[email protected]", password: "1234567")
admin_two = User.create!(email: "[email protected]", password: "1234567")
puts "Creating Groups"
group_one = Group.create!(name: "Test Group One", description: "blablabla", admin: admin_one)
group_two = Group.create!(name: "Test Group Two", description: "blablabla", admin: admin_two)
puts "Creating Tasks"
task_one = Task.create!(name: "Task 1", user: user_one, group: group_one, assignee: admin_one)
task_two = Task.create!(name: "Task 2", user: admin_one, group: group_one, assignee: admin_one)
# Test if we can create tasks for users not part of the group
task_two = Task.create!(name: "Task 3", user: admin_one, group: group_one, assignee: admin_two)
我意识到,即使是 的一部分,我仍然可以创建一个与受让人(与该组完全无关)的人。admin_one
group_one
Task
admin_two
有没有办法设置它,以便任务分派者的组需要是用户所在的组?是唯一的选择还是有其他方法可以实现逻辑?callback
谢谢!
答:
3赞
iftheshoefritz
2/6/2023
#1
为此,您可以使用自定义验证:
# in task model
validate :assignee_in_correct_group
def assignee_in_correct_group
errors.add(:group_id, 'is not the same as assignee group id') unless assignee.groups.exist?(id: group.id)
end
评论
0赞
max
2/6/2023
这实际上不起作用,因为您错误地假设它是 1:1 关联。问题指出:“这个想法是用户可以位于不同的组中,组可以有不同的用户”。
0赞
max
2/6/2023
你需要。assignee.groups.exist?(id: group.id)
评论