这个问题源于:如何在创建rails连接表后链接表单
我正在创建产品和类别模型之间的联接表。
联接表应该命名为什么?categories_products或category_products或其他什么?
categories_products
。两者均为复数。按照词汇顺序。
报价:
除非通过使用:join_table选项,Active Record通过使用类名的词汇顺序。因此,客户和订单之间的连接模型将提供默认的联接表名称"customer_orders"因为"c"在词汇顺序上高于"o"。
Rails 4
请注意,Rails4中有一些新规则。
指定与另一个类的多对多关系。这通过一个中间联接表将两个类关联起来。除非将联接表明确指定为选项,否则将使用类名的词法顺序进行猜测。因此,Developer和Project之间的联接将提供默认的联接表名称"developers_projects",因为"D"按字母顺序位于"P"之前。
注意,该优先级是使用<的运算符一串这意味着,如果字符串的长度不同,并且当与最短长度进行比较时,字符串是相等的,那么较长的字符串被认为比较短的。例如,人们会期望这些表是"paper_boxes"one_answers"papers"生成一个连接表名称"papers_paper_boxes"因为名称"paper_boxes"的长度,但事实上生成一个联接表名称"paper_boxes_pers"。请注意这一点注意,如果需要,请使用custom:join_table选项。
如果您的表共享一个公共前缀,则该前缀将只在开始例如,表"catalog_gategories"one_answers"catalog_products"生成的联接表名称"catalog_cotegories_products"。
=>Docs for Rails v4.2.7
# 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
轨道5
规则仍然非常相同。有了Rails5,我们有了一个新的助手来创建带有迁移的联接表:
class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[5.0]
def change
create_join_table :developers, :projects
end
end
=>Rails 的边缘文档
例如,如果您想在项目表和合作者表之间创建一个联接表,则必须按以下方式命名。
语法:first_table_name(UNDERSCORE)second_table_name
# Names must be in alphabetical order and also in plural
# Decide which is your first table name based on the alphabetical order
示例:在项目和协作者之间创建联接表
Collaborator-Project
collaborators_projects
# you should name it like this; In alphabetical order with plural names
示例2:在BlogPost表和用户表之间创建联接表
BlogPost-User
blog_posts_users # In alphabetical order with plural names
新的create_join_table迁移创建了一个没有相应模型的联接表,因此模型名称不需要命名约定。
要访问联接,必须在这两个表上声明has_and_belongs_To_any,并通过创建的关联来访问它们。