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

时间:2012-05-24 18:28:15

标签: ruby-on-rails activerecord

以下是我当前的数据库设置:https://gist.github.com/8dfad988528fc9fbc394

我想创建一个主机,只要它不存在(匹配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]).first_or_create
@host.users << User.find(1)

2 个答案:

答案 0 :(得分:2)

你可以做到

host.users << User.find(1)

应该是这样的: - )

答案 1 :(得分:1)

只需使用它,ActiveRecord就会处理关系:

@host = Host.find_or_create_by_host(host: params[:host], port: params[:port])
@user = User.find(1)
@user.hosts << @host
@user.save