Ruby on Rails将模型添加到关联

时间:2013-01-02 16:28:46

标签: ruby-on-rails associations

以下是我的模特:

class Hour < ActiveRecord::Base
  attr_accessible :time, :user
  belongs_to :project
end

class Project < ActiveRecord::Base
  attr_accessible :name
  has_many :hour, :dependent => :destroy
end

我正在尝试做这样的事情:

hour = Hour.new
#add values to the hour object here
hour.save!
project = Project.find :first
project.hour.add hour #how do I actually do this?
projet.save!

这会引发错误。如何将模型添加到关联?

我来自Doctrine2的PHP背景。在Doctrine2中我会做类似的事情:

$projects->getHours()->add($hour);

另外,我已阅读这些文档:http://guides.rubyonrails.org/association_basics.html。它们似乎涵盖了如何创建关联的所有内容,但我无法找到有关如何使用它们的信息!关于如何与协会合作的任何好文档?

2 个答案:

答案 0 :(得分:1)

首先,正确的名称,

has_many :hours

然后,

project.hours << hour
<{3}}

中的

4.3.1.2

答案 1 :(得分:0)

您可以像数组一样添加它:

project.hours << hour

但通常使用关联直接构建新模型会更自然:

hour = project.hours.build({ your: "...",  attributes: "...", here: "..."})
# Do more stuff with hour
project.save!

build方法的行为与new类似,但出于技术原因,此处必须将其命名为build

或者如果您想立即保存模型:

project.hours.create({ your: "...",  attributes: "...", here: "..."})

Rails文档中列出了“神奇”的关联方法。看看has_many Association Reference