2015-01-28 2 views
0

У меня есть эта связь между пользователями, командыДобавить дополнительное поле в Rails HABTM присоединяется

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

Вы хотите добавить столбец 'user_name' в' teams_users'? –

+0

yes Я хочу добавить имя_имя столбца в teams_users –

+0

Как это сделать? –

ответ

1

Вместо HABTM вы должны использовать has_many и has_many :through.

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 
0

Короткая версия, вы не можете делать то, что вы пытаетесь сделать без небольшого рефакторинга. Вот как я это сделал (извинения, если есть проблемы с синтаксисом, я делаю это из памяти, я не тестировал код, но принцип звучит)

Создайте новую модель для представления «членства» команды (возможно назвать это «членство») и связанная с миграцией, чтобы создать таблицу:

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 

После того, как вы это переработан далеко, добавление дополнительных столбцов/атрибутов в «членство» легко, потому что йо u может просто рассматривать его как любую другую модель.

+0

Теперь, как добавить дополнительные столбцы/атрибуты в «членства», пожалуйста, помогите, я смущен –

+0

Создайте новую миграцию в create_table «Memberships» , Это будет включать ваш новый столбец (other_name). Это позволит вам сделать это: user.memberships.each do | m | m.other_name конец Что касается получения фактической формы работы, см. Документацию для «accepts_nested_attributes_for» –

+0

@haseeb, которую вы просто собираетесь исчезнуть? Люди нашли время, чтобы ответить на ваш вопрос здесь! –

Смежные вопросы