如何在Rails中设置'type'表关联?

时间:2013-04-19 22:22:58

标签: ruby-on-rails

我确信已经在很多地方询问过(并回答过),而且我可能不知道如何正确地询问。这是我的问题,我正在尝试将简单的Product设置为ProductType关联。我是RoR的新手,因为在Rails中有很多内置帮助器,我正在寻找解决方案,而不是通常手工构建所有内容。

这就是我对模型的看法(我对在Rails中如何/何时使用单数/复数描述符感到很困惑)。

product.rb

class Product< ActiveRecord::Base
 attr_accessible :name
 has_one :product_tpe
end

pruduct_type.rb

class ProductType< ActiveRecord::Base
attr_accessible :name

belongs_to :product
end

这显然是错误的(我认为我不太了解belongs_to:方法)。在通常的SQL关系中,product表将与product_types表的多对一关系链接。

我收到了错误:

SQLite3::SQLException: no such column: product_types.product_id: SELECT  "product_types".* FROM "product_types"  WHERE "product_types"."product_id" = 1 LIMIT 1

因为我显然不想在product_types表中使用product_id,所以错误是有道理的;但这不是我故意做的事。

不是抱怨,但我已经完成了至少设置微博样本应用程序的RoR指南。是否还有其他与RoR协会合作的优秀教程?

1 个答案:

答案 0 :(得分:1)

你的关系只是倒置了。具有外键的记录应具有belongs_to。此外,您可能希望在另一端使用has_many关系。所以:

class Product < ActiveRecord::Base
  attr_accessible :name
  belongs_to :product_tpe
end

class ProductType< ActiveRecord::Base
  attr_accessible :name

  has_many :products
end

最后,在迁移中,您应该添加一个product_type_id整数列(为其添加索引以及更快的查找)。