使用 has_many 关系保存记录

Posted

技术标签:

【中文标题】使用 has_many 关系保存记录【英文标题】:Usage of has_many relationship to save records 【发布时间】:2013-04-13 16:55:13 【问题描述】:

我是 Rails 新手,对 has_one 和 has_many 关系有点困惑。

我有两个模型 - USER 和 LOCATION。

每个用户都有一个位置,一个位置可以属于许多用户。

所以,我是这样创建的:

class User < ActiveRecord::Base
  belongs_to :location
end

class Location < ActiveRecord::Base
  has_many :users
end

现在当我想创建一个新用户并保存位置时,我应该怎么做? 是这样吗???

@user = User.new
@user.name = params[:name]

@loc = Location.new
@loc.zip = params[:zip]
@loc.save

@user.location = @loc
@user.save

这是不对的,对我不起作用。任何帮助或指点将不胜感激。

rails 书籍仅指定如何创建这些关联。不是关于如何保存这些关联的记录。

【问题讨论】:

将 '@user.loc = loc' 更改为 '@user.location = loc' 应该可以工作 你需要说明它是如何失败的。错误信息是什么?另外,桌子上的列是什么?您是否在users 表上创建了location_id 你有 location_id 作为用户的字段吗? 感谢 Andrew France 和 rovermicrover。我假设 Rails 根据指定的关联创建外键。添加后,问题就解决了。 【参考方案1】:

save 更改为 save! 以引发异常并查看什么不适合您。

另一种方法是

@loc = Location.create!(:zip => params[:zip])
@user.create!(:name => params[:name], :location_id => @loc.id)

您可能会喜欢接收 params[:users][:name] 之类的参数作为参数,因为例如,如果属性多于名称,您可以这样做

@user.create(params[:user])

【讨论】:

以上是关于使用 has_many 关系保存记录的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Rails 中使用“has_many :through”关系?

Kohana 3 ORM - 使用静态方法连接和 has_many 关系

如何实现has_many:通过与Mongoid和mongodb的关系?

Rails RSpec 测试 has_many :through 关系

Rails:has_many 通过多态关联——这行得通吗?

使用 `:has_many :through` 记录关联处理复选框表单