【问题标题】:How do you make a has_many association unique?如何使 has_many 关联独一无二?
【发布时间】:2011-08-08 18:10:03
【问题描述】:

这是一个例子:

Class Store < ActiveRecord::Base
  has_many :employees
end

现在当我像这样创建员工时:

employee = Employee.new(attributes)

然后是两个这样的商店:

store1 = Store.new(employees: [employee])
store2 = Store.new(employees: [employee])

它将员工的 store_id 更改为 store 2,摆脱与 store1 的关联。如何确保只能将一名员工分配到一家商店?

【问题讨论】:

  • 你想在这里发生什么?如果您尝试将已分配到其他商店的员工分配到商店,您是否希望引发错误?
  • 您是否曾经希望员工能够更换商店(例如,如果他们调动)?
  • 没有。在我的情况下,如果员工要更换商店,则应该为该员工创建一个全新的记录,而旧记录只会将“当前员工”标志更改为 false。这样他们属于该商店的记录仍然存在(以及他们的终止日期)

标签: ruby-on-rails activerecord has-many


【解决方案1】:

尝试使用 .build 语法:

所以在创建操作中(我假设这是来自员工的新操作,并且商店已经创建。)执行以下操作:

#this is the id of whatever store... maybe its a nested resource so it would be something like
#@store = Store.find(params[:store_id])
@store = Store.find(id)
@employee = @store.employees.build(params[:employee])

还要确保您的员工模型中有一个 belongs_to。

【讨论】:

  • 这实际上回答了我的下一个问题,但我也想确保安全,确保没有其他人可以按照我的方式创建这些记录。这将产生非常糟糕的后果。
  • 看起来您需要某种授权解决方案。查看 CanCan,它简单且可扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多