在创建时通过关联将属性值添加到has_many中的连接表记录中

时间:2012-03-25 14:33:00

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord has-many-through

我在我的Rails 3.2应用程序上建立了一个has_many:through关系。我有大多数工作,除了我不确定如何在创建关系时为连接表上的属性添加值。

以下是模型(请注意 Checkins 表中的 source_id ):

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

我正在使用这些说明(实质上)来加载用户和位置并与Checkin建立关系:

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

所以,我的问题是,在使用此行时,如何将 source_id 值添加到 Checkins 表中:

@user.locations << @location

我也愿意接受关于使用此关系创建新用户签名的更好流程的建议,而不是我上面提到的(我见过创建构建使用的方法,但似乎没有一个对我有用)

1 个答案:

答案 0 :(得分:8)

直接创建Checkin对象。

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