【问题标题】:Usage of has_many relationship to save records使用 has_many 关系保存记录
【发布时间】: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 根据指定的关联创建外键。添加后,问题就解决了。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多