2013-04-29 61 views
0

我有一个Rails项目要做。我使用roo解析一个.xls文件,并将这些信息放入关系数据库中。如果ruby不使用外键,我怎么才能恢复这种关系?假设我有类别和子类别表,我正在读取.xls文件中的行并将信息写入数据库。一个类别有许多子类别。但可能有一个现有的类别(所以我不需要再添加它)。使用rails控制台,我会怎么做?我正在使用类似a = Category.new(name_category: "test")的东西。这应该创建一个类别,但它不链接到一个子类别。我如何在一个命令中添加和链接它们?如果一个子类别有一个项目会怎样。我将如何创建涉及3个关系的东西?在Rails控制台中创建具有关系的对象

+0

这真的取决于你的.xls文件。他们是否包含subcategory_id或类似的东西将对象链接到另一个? – MrYoshiji 2013-04-29 18:05:54

+0

是的,他们这样做。 @MrYoshiji – andrefurquin 2013-04-29 18:32:29

+0

我想要一个可以这样工作的命令。即使是这样也行不通。 Category.create(name:“test”)。subcategory.create(name:“foo”)。我知道这是行不通的。在代码中创建关系,这样rails就知道它们已经连接起来了..我不确定.. – andrefurquin 2013-04-29 18:35:15

回答

0

不要在一个命令中完成。您需要首先“查找或创建”类别。

category = Category.find_or_create_by_name(name: "test") 
Subcategory.create(name: "foo", category: category) 

你的模型应该是这样的:

class Category < ActiveRecord::Base 
    has_many :subcategories 
end 

class Subcategory < ActiveRecord::Base 
    belongs_to :category 
end 
+0

谢谢。我想我现在可以做到! – andrefurquin 2013-04-29 21:44:04

+0

我收到此错误:ActiveModel :: MassAssignmentSecurity ::错误:无法批量分配受保护的属性:类别。 – andrefurquin 2013-04-29 23:19:48

+0

嗯,你也需要在你的子类别模型中的这一行: 'attr_accessible:子类' – ndbroadbent 2013-04-30 00:33:02

相关问题