0

这是我的第一个 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 关系文档页面 (http://guides.rubyonrails.org/association_basics.html),但我无法弄清楚这一点。

非常感谢您的帮助!

4

1 回答 1

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

希望它能如你所愿!

于 2012-12-30T20:20:24.653 回答