1

has_many,等数据模式修饰符的语法belongs_to不需要指定列标识符来建立关联。 Rails 如何推断表之间的关系? 我见过的所有示例都使用<table_name>_id具有外部关系的表中的约定:这不仅仅是一种常见的做法吗?

4

2 回答 2

1

Ruby on Rails 使用“约定优于配置”模式(约定优于配置)。例如,对于has_many关联,应该有foreign_key(没有它就无法理解如何链接事物),默认情况下它是model_name_id列,但您可以指定它(这里是关于关联基础的信息)。

所以你可能有CategoryArticle模型通过has_many关联链接,默认情况下active_record会在表中查找category_idarticles,但你可能有cat_id列,然后写:

# in category model
has_many :articles, :class_name => 'Article', :foreign_key => "cat_id"
# in article model
belong_to :category, :class_name => 'Category', :foreign_key => "cat_id"
于 2013-04-03T02:33:54.620 回答
1

这看起来像 rails 的“魔术”,但这只是 ActiveRecord 所做的假设

4.1.2.6:外键

按照惯例,Rails 假定在这个模型上用于保存外键的列是关联名称加上后缀 _id。:foreign_key 选项允许您直接设置外键的名称:

资料来源: http: //guides.rubyonrails.org/association_basics.html

于 2013-04-03T02:40:57.237 回答