我目前有一个协会:
Group :has_many Employees
和Employee :belongs_to Group
但现在我希望员工也与许多群组相关联。
为此,我正在考虑制作:
groupizations group_id:integer employee_id:integer created_at:datetime
这将改变员工和集团模式:
class Groupizations < ActiveRecord::Base
belongs_to :employee
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :groupizations
has_many :employees, :through => categorizaitons
end
class Employee < ActiveRecord::Base
has_many :groupizations
has_many :groups, :through => categorizaitons
end
我从多对多的railscasts episode了解所有这些。我唯一困惑的是,现在我用以下代码创建一个新的Employee:
def create
@employee = Employee.new(params[:employee])
if @employee.save
flash[:notice] = "Successfully created employee."
redirect_to @employee
else
render :action => 'new'
end
end
这段代码将如何变化?我是否需要同时将数据添加到groupizations
?
答案 0 :(得分:1)
如果您想将员工添加到组,您只需要执行以下操作:
@employee.groups << @group
您自己创建的Groupization
记录将自动创建。如果你想在关联中放入一些元数据,这在你想要指定这种关系的本质时很常见,你可以做一些更正式的事情:
@employee.groupizations.create(
:group => group,
:badge_number => 'F920'
)
由于连接模型通常在两个ID列上具有唯一索引,因此请务必避免插入重复记录时可能发生的错误。根据您的后端数据库,这些看起来不同,因此请进行相应的测试。您可以根据需要使用find_or_create
。