这是一个单独的问题,但它与之前的问题有关:Three Column Join in Rails with Active Scaffold。总结一下:Rails会自动查找两列连接表,但对于三列连接表则不会这样做。我已经尝试了上一个问题中的建议,但它归结为:
如果你有模型Project,Employee,Role,并且每个模型都与其他两个有关系,rails会分别完成每个关系,但不能作为一个整体。
class Employee < ActiveRecord::Base
#has_many :employees_projects_roles
#has_many :roles, :through => :employees_projects_roles
#has_many :projects, :through => :employees_projects_roles
has_and_belongs_to_many :roles
has_and_belongs_to_many :projects
end
重复Project,角色跟随
class Role < ActiveRecord::Base
#has_many :employees, :through => :employees_projects_roles
#has_many :projects, :through => :employees_projects_roles
has_and_belongs_to_many :employees
has_and_belongs_to_many :projects
end
我的问题是这个,因为rails查找employees_projects, projects_roles
,而employees_roles
而不是employees_projects_roles
是否有办法将这些名称别名为真实的表名,并仍允许使用CRUD功能数据库(MySQL或PostgreSQL)?
[编辑] 哎呦。在我喝足够的咖啡之前,我必须停止公开回答和提问。将注释掉的部分从hmt更改为habtm。包含注释掉的代码部分,以反映我尝试的各种选项。
答案 0 :(得分:6)
我假设你有这样的东西加入你的模型:
def self.up
create_table :my_join_table, :id => false do |t|
t.integer :employee_id
t.integer :role_id
t.integer :project_id
t.timestamps
end
end
如果是这样,您只需指定要与您的habtm一起使用的连接表的名称。
class Employee < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => "my_join_table"
has_and_belongs_to_many :projects, :join_table => "my_join_table"
end
class Project < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => "my_join_table"
has_and_belongs_to_many :employees, :join_table => "my_join_table"
end
class Role < ActiveRecord::Base
has_and_belongs_to_many :employees, :join_table => "my_join_table"
has_and_belongs_to_many :projects, :join_table => "my_join_table"
end