has_many
,等数据模式修饰符的语法belongs_to
不需要指定列标识符来建立关联。 Rails 如何推断表之间的关系? 我见过的所有示例都使用<table_name>_id
具有外部关系的表中的约定:这不仅仅是一种常见的做法吗?
问问题
110 次
2 回答
1
Ruby on Rails 使用“约定优于配置”模式(约定优于配置)。例如,对于has_many
关联,应该有foreign_key
(没有它就无法理解如何链接事物),默认情况下它是model_name_id
列,但您可以指定它(这里是关于关联基础的信息)。
所以你可能有Category
和Article
模型通过has_many
关联链接,默认情况下active_record
会在表中查找category_id
列articles
,但你可能有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 回答