Добавление значений атрибутов в запись таблицы соединений в has_many: посредством ассоциации при создании - PullRequest
2 голосов
/ 25 марта 2012

Я устанавливаю отношения has_many: through в моем приложении Rails 3.2. У меня почти все работает, за исключением того, что я не уверен, как добавить значения к атрибутам в таблице соединений при создании отношений.

Вот модели (обратите внимание на source_id в таблице Checkins ):

create_table "users", :force => true do |t|
  t.integer  "name"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "checkins", :force => true do |t|
  t.integer  "user_id"
  t.integer  "location_id"
  t.integer  "source_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "locations", :force => true do |t|
  t.string   "name"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

Вот настройки отношений:

class User < ActiveRecord::Base
  has_many :checkins
  has_many :locations, :through => :checkins
end

class Location < ActiveRecord::Base
  has_many :checkins
  has_many :users, :through => :checkins
end

class Checkin < ActiveRecord::Base
  belongs_to :location
  belongs_to :user
end

Я использую эти инструкции (по сути) для загрузки пользователя и местоположения и создания отношений с проверкой:

source_id = 10
@user = User.first
@location = Location.first
@user.locations << @location

Итак, мой вопрос: как мне также добавить значение source_id в таблицу Checkins при использовании этой строки:

@user.locations << @location

Я также открыт для предложений относительно лучшего процесса создания новых пользовательских проверок с этим отношением, чем у меня (я видел используемые методы create и build, но никто, похоже, не работает для меня)

1 Ответ

8 голосов
/ 25 марта 2012

Создание Checkin объекта напрямую.

checkin = Checkin.new user: @user, location: @location, source_id: source_id 
checkin.save
...