Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中创建具有关系的唯一行_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 在Rails中创建具有关系的唯一行

Ruby on rails 在Rails中创建具有关系的唯一行,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,以下是我当前的数据库设置: 我只想在不存在类似主机的情况下创建一个主机(匹配on:host和:port),然后我想将该主机的关系添加到关系表中 多个用户可以拥有一台主机,或者一台主机可以属于多个用户。我当前的数据库设置正常,关系也创建好了,我只是不知道如何在Rails中优雅地完成这项工作。到目前为止,我已经通过手动将值输入数据库进行了测试,如下所示: @host = Host.find_or_create_by_host(host: params[:host], port: params[:po

以下是我当前的数据库设置:

我只想在不存在类似主机的情况下创建一个主机(匹配on:host和:port),然后我想将该主机的关系添加到关系表中

多个用户可以拥有一台主机,或者一台主机可以属于多个用户。我当前的数据库设置正常,关系也创建好了,我只是不知道如何在Rails中优雅地完成这项工作。到目前为止,我已经通过手动将值输入数据库进行了测试,如下所示:

@host = Host.find_or_create_by_host(host: params[:host], port: params[:port])
@user = User.find(1)
@user.relation.create(user_id: @user.id, host_id: @host.id)
有没有更好的方法来做到这一点,如果有,那会是什么

解决方案
@host=host.where(host:params[:host],port:params[:port])。首先\u或\u创建

@host.users只需使用它,ActiveRecord就会处理以下关系:

@host = Host.find_or_create_by_host(host: params[:host], port: params[:port])
@user = User.find(1)
@user.hosts << @host
@user.save
@host=host。通过主机查找或创建(主机:params[:host],端口:params[:port])
@user=user.find(1)

@user.hosts只需使用它,ActiveRecord就会处理以下关系:

@host = Host.find_or_create_by_host(host: params[:host], port: params[:port])
@user = User.find(1)
@user.hosts << @host
@user.save
@host=host。通过主机查找或创建(主机:params[:host],端口:params[:port])
@user=user.find(1)
@user.hosts您可以

host.users << User.find(1)
host.users您可以

host.users << User.find(1)

host.users您确定
@user.save
?有必要吗?如果他想保持连接,他必须保存两个相关对象中的一个。否则就没有必要了。
@user
@host
都会被持久化
您确定用户是否保存了
@user.save
?有必要吗?如果他想保持连接,他必须保存两个相关对象中的一个。否则就没有必要了。
@user
@host
都会被持久化<代码>
find\u或\u create\u by.*
动态方法现在不受欢迎。您可以使用:
Host.where(Host:params[:Host],port:params[:port])。first_或_create
(也可以使用
first_或_create!
first_或_initialize
)。您可以传入此
第一个\u或*
要在创建时使用的哈希(如果查找失败)。更清楚了。但是你必须让Rails 3.2.0为我原来的问题添加解决方案。
find\u或\u create\u by.*
动态方法现在不受欢迎。您可以使用:
Host.where(Host:params[:Host],port:params[:port])。first_或_create
(也可以使用
first_或_create!
first_或_initialize
)。您可以传入此
第一个\u或*
要在创建时使用的哈希(如果查找失败)。更清楚了。但是你必须让Rails 3.2.0为我的原始问题添加解决方案。我选择Matzi作为正确答案,因为它更详细,但这是我将使用的方法。我选择Matzi作为正确答案,因为它更详细,但这是我将使用的方法。