使用 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的关系?