0

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

我只想在不存在类似主机的情况下创建主机(匹配 :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)
4

2 回答 2

2

你可以做

host.users << User.find(1)

应该就是这样:-)

于 2012-05-24T18:45:17.437 回答
1

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

@host = Host.find_or_create_by_host(host: params[:host], port: params[:port])
@user = User.find(1)
@user.hosts << @host
@user.save
于 2012-05-24T18:43:58.750 回答