我在用户,团队之间有这种关系
class CreateTeamsUsers < ActiveRecord::Migration
def change
create_table :teams_users, :id => false do |t|
t.references :user
t.references :team
t.timestamps
end
end
end
class User < ActiveRecord::Base
has_and_belongs_to_many :teams
end
class Team < ActiveRecord::Base
has_and_belongs_to_many :users
end
问题是我想在HABTM中添加额外的属性,属性名称是“user_name” 怎么做?
答案 0 :(得分:1)
您可以使用has_many
和has_many :through
来代替HABTM。
class User < ActiveRecord::Base
has_many :memberships
has_many :team, through: :membership
end
class Membership < ActiveRecord::Base # This would be your old 'join table', now a full model
belongs_to :user
belongs_to :team
end
class Team < ActiveRecord::Base
has_many :memberships
has_many :users, through: :memberships
end
答案 1 :(得分:0)
简短版本,如果不进行一些重构,您就无法完成您的尝试。以下是我将如何做到这一点(道歉,如果有语法问题,我从记忆中做到这一点我没有测试过代码,但原理是合理的)
创建一个新模型来代表&#34;会员资格&#34;团队的成员(可能称之为&#34;成员资格&#34;)以及创建表格的相关迁移:
class Membership
belongs_to :team
belongs_to :user
end
然后更改您的团队和用户模型以使用此新模型:
class User
has_many :memberships
has_many :teams, through: :memberships
end
class Team
has_many :memberships
has_many :users, through: :memberships
end
一旦你重构了这一点,就可以在&#34;会员资格中添加额外的列/属性&#34;很简单,因为你可以像对待任何其他模型一样对待它。