联接表的Rails命名约定



这个问题源于:如何在创建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 的边缘文档

Rails中的Join表只能按字母顺序创建。每次创建联接表时都要记住这一点。

例如,如果您想在项目表和合作者表之间创建一个联接表,则必须按以下方式命名。

语法: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,并通过创建的关联来访问它们。

相关内容

  • 没有找到相关文章

最新更新