Ruby on rails Rails避免连接表has\u many到has\u many上的重复记录

Ruby on rails Rails避免连接表has\u many到has\u many上的重复记录,ruby-on-rails,activerecord,orm,Ruby On Rails,Activerecord,Orm,我们有一个用户的常规模型(user.rb): 型号: class User < ApplicationRecord has_many :clientes, through: :clientes_users end class Cliente < ApplicationRecord has_many :clientes_users has_many :users, through: :clientes_users end 所

我们有一个用户的常规模型(user.rb):

型号:

class User < ApplicationRecord
  has_many :clientes,         through: :clientes_users
end
class Cliente < ApplicationRecord
    has_many :clientes_users
    has_many :users,            through: :clientes_users
end
所有工作正常,我们的表存储数据:

但当我们更新关系时,记录会复制条目

如果关系不存在,请插入数据,如果存在,请忽略,避免这种行为的最佳方法是什么


提前问候。

定义一个
有许多
关联也会给你带来设置者和获取者
@user
应具有可用于分配的方法
客户ID
客户ID=
。您可以执行以下操作:

@user = User.create!(
  email: params[:email],
  access_level: params[:access_level],
  password: params[:password_first],
  password_confirmation: params[:password_confirmation],
  cliente_ids: params[:cliente_id]
)
还要注意的是,
password
password\u first
之间的不匹配,以及
cliente\u id
cliente\u id
之间的不匹配是误导性的,在这两种情况下使用相同的名称会更好

如果参数名称与模型属性相同,则可以进一步执行以下操作:

@user = User.create!(user_params)

def user_params
  params.require(:user).permit(:email, :access_level, :password, :password_confirmation, :cliente_ids)
end
如果控制器参数未在键
user
下限定范围,则删除
require(:user)
,即使它们可能应该这样做


希望这有所帮助。

您能向我们展示您的更新操作吗?您只粘贴了创建操作,如果我没有弄错的话,创建不是您要问的问题。您好,很抱歉您是对的
@user=user.find(8)@user.clientes\u users.build(:cliente=>cliente.find(6))@user.save
问题不在于如何调用,而在于如何在插入数据时避免重复。
@user = User.create!(
  email: params[:email],
  access_level: params[:access_level],
  password: params[:password_first],
  password_confirmation: params[:password_confirmation],
  cliente_ids: params[:cliente_id]
)
@user = User.create!(user_params)

def user_params
  params.require(:user).permit(:email, :access_level, :password, :password_confirmation, :cliente_ids)
end