更新现有记录之间的关联

时间:2015-02-26 20:21:38

标签: ruby-on-rails has-many-through model-associations

我有一个用户表和服务表:

class User < ActiveRecord::Base
  has_many :services, through: :services_users
end

class Service < ActiveRecord::Base
  has_many :users, through: :services_users
end

使用连接表:

 create_table "services_users", id: false, force: :cascade do |t|
   t.integer "service_id", limit: 4
  t.integer "user_id",    limit: 4
 end

我有一个表单来选择用户和服务,我想关联它们, 表单选择服务然后选择用户

我有以下

user_dispatcher_path(user,service), method: :put

带路线

put "dispatcher" => "userrs#dispatcher", as: :dispatcher

在我的用户控制器中,我已经开始

 def dispatcher
    ?
 end
然后我被卡住了:

我想我可以使用update_all,也许我可以将两个id直接保存到services_users

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果ServicesUsers没有activerecord模型,请尝试使用

@user = User.find(params[:user_id])
@user.services << Service.find(params[:service_id])

如果用户/房屋尚未存在,请使用create。或者更好的是,使用find_or_create_by

模拟您的需求的替代方式。

http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association - 这正是您所需要的。 assemblies = services,parts = users。