Как сохранить данные с помощью has_many: through - PullRequest
5 голосов
/ 06 декабря 2011

У меня есть отношения многие ко многим между моделями игр и аккаунтов, как показано ниже:

class Account < ActiveRecord::Base
  has_many :account_games, :dependent => :destroy
  has_many :games, :through => :account_games
end

class Game < ActiveRecord::Base
  has_many :account_games, :dependent => :destroy
  has_many :accounts, :through => :account_games
end

class AccountGame < ActiveRecord::Base
  belongs_to :account
  belongs_to :game
end

Теперь я знаю, скажем, я хочу создать запись примерно так:

@account = Account.new(params[:user])
@account.games << Game.first
@account.save

Но как мне обновить некоторые атрибуты в AccountGame, пока я это делаю? Допустим, у AccountGame есть поле с именем score, как мне обновить этот атрибут? Можете ли вы рассказать мне о лучшем способе сделать это? Чтобы добавить любое поле в сквозную таблицу при сохранении объекта.

Ответы [ 2 ]

12 голосов
/ 07 декабря 2011
@account = Account.new(params[:user])
@accountgame = @account.account_games.build(:game => Game.first, :score => 100)
@accountgame.save

Хотя я настоятельно рекомендую, чтобы, если вы начнете добавлять столбцы к вашей модели соединения, вы называете это как-то иначе, например, «подписка» или «членство», или что-то подобное. Как только вы добавляете столбцы, он перестает быть моделью объединения и становится просто обычной моделью.

2 голосов
/ 03 октября 2012

Это должно работать:

class AccountGame < ActiveRecord::Base
  belongs_to :account
  belongs_to :game
  attr_accessible :account_id, :game_id    #<======= Notice this line
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...