Yog*_*zzz 50 ruby-on-rails rails-migrations ruby-on-rails-3 ruby-on-rails-3.1
这个问题源于:如何在创建rails join表之后链接表单
我正在创建产品和类别模型之间的连接表.
连接表应该命名为什么?categories_products或category_products或其他什么?
Zab*_*bba 59
categories_products.都是复数.在词汇顺序.
除非使用:join_table选项显式指定连接表的名称,否则Active Record将使用类名的词法顺序创建名称.因此,客户和订单模型之间的连接将提供默认的连接表名称"customers_orders",因为"c"在词法排序中超出"o".
dam*_*ser 46
注意从Rails 4中有一些新的规则.
指定与另一个类的多对多关系.这通过中间连接表关联两个类.除非将连接表明确指定为选项,否则使用类名的词法顺序进行猜测.因此,Developer和Project之间的连接将提供默认连接表名称"developers_projects",因为"D"按字母顺序排在"P"之前.
请注意,此优先级使用<operator for String计算.这意味着如果字符串具有不同的长度,并且在比较最短长度时字符串相等,则较长字符串被认为具有比较短字符串更高的词汇优先级.例如,由于名称"paper_boxes"的长度,人们会期望表"paper_boxes"和"papers"生成连接表名称"papers_paper_boxes",但实际上它生成连接表名称"paper_boxes_papers".请注意这一警告,如果需要,请使用custom:join_table选项.
如果您的表共享一个公共前缀,它只会在开头出现一次.例如,表"catalog_categories"和"catalog_products"生成连接表名称"catalog_categories_products".
# alphabetically order
developers + projects --> developers_projects
# precedence is calculated with '<', lengthier strings have precedence
# if the string are equal compared to the shortest length
paper_boxes + papers --> paper_boxes_papers
# common prefix omitted
catalog_categories + catalog_products --> catalog_categories_products
Run Code Online (Sandbox Code Playgroud)
规则仍然相同.使用Rails 5,我们有一个新的帮助器,用于创建具有迁移的连接表:
class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[5.0]
def change
create_join_table :developers, :projects
end
end
Run Code Online (Sandbox Code Playgroud)
=> Rails的边缘文档
| 归档时间: |
|
| 查看次数: |
25113 次 |
| 最近记录: |