如何在我的rake任务中将对象设置为另一个对象的子对象?

时间:2012-12-30 19:34:39

标签: ruby-on-rails activerecord relationships

这是我的第一个Rails项目,这似乎是一个非常简单的问题,但我似乎找不到任何例子。

我不知道如何创建对象并将其设置为另一个已存在的对象的子对象。在这种情况下,我有一个城市和一个国家,我不知道如何创建一个新的城市,并将其设置为与某个国家(已经在我的数据库中)相关。

Class City < ActiveRecord::Base
   attr_accessible #nothing
   belongs_to :country
end

Class Country < ActiveRecord::Base
   attr_accessible #nothing
   has_many :cities
end

当我在rake任务中创建一个新的Country对象和一个新的City对象时,我应该如何关联这两个对象?

现在我能找到的最接近我想做的事情是:

city = City.new
city.name = "Chicago"
country = Country.find(1)
city_final = country.cities.create(city.attributes)
city_final.save

我对这段代码的两个问题是我不想使用批量分配(我计划让这两种模型的CRUD操作仅用于rake任务),我不知道它是怎么回事作品。假设我完全打开了质量分配,这段代码会创建一个重复的城市对象吗?因为否则为什么我需要传递城市的属性?看起来我正在寻找的是通过直接分配将一个新城市添加到该国的城市属性的某种方式,而无需通过控制器。

我查看了RoR ActiveRecord Relationships文档页面(http://guides.rubyonrails.org/association_basics.html),但我无法弄清楚这一点。

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

ActiveRecord为集合提供了一些getter和setter方法,请参阅http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Auto-generated+methods

所以你可以写

country = Country.find(1)
city = City.new
city.name = "Chicago"
city.country = country #Or Country.find(1) directly here
city.save

希望它能按你的意愿运作!