在Rails habtm连接中添加额外字段

时间:2015-01-28 13:54:52

标签: ruby-on-rails ruby activerecord

我在用户,团队之间有这种关系

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” 怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用has_manyhas_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;很简单,因为你可以像对待任何其他模型一样对待它。