我在我的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
我也愿意接受关于使用此关系创建新用户签名的更好流程的建议,而不是我上面提到的(我见过创建和构建使用的方法,但似乎没有一个对我有用)
答案 0 :(得分:8)
直接创建Checkin
对象。
checkin = Checkin.new user: @user, location: @location, source_id: source_id
checkin.save