这些问题源于:How to link form after creating rails join table
我正在创建产品和类别模型之间的连接表。
连接表应该命名为什么? categories_products或category_products或其他东西?
答案 0 :(得分:57)
categories_products
。都是复数。按词汇顺序。
除非使用。明确指定了连接表的名称 :join_table选项,Active Record通过使用创建名称 类名的词法顺序。所以客户和订单之间的联系 模型将提供默认的连接表名称“customers_orders” 因为“c”在词汇排序中胜过“o”。
答案 1 :(得分:44)
请注意 Rails 4 有一些新规则。
指定与另一个类的多对多关系。这通过中间连接表关联两个类。除非将连接表明确指定为选项,否则使用类名的词法顺序进行猜测。因此,Developer和Project之间的连接将提供默认连接表名称“developers_projects”,因为“D”按字母顺序排在“P”之前。
请注意,此优先级使用<运营商 串。这意味着如果字符串具有不同的长度,并且 当比较到最短的长度时,弦是相等的 较长的字符串被认为具有较高的词汇优先级 较短的一个。例如,人们会期望表格“paper_boxes” 和“papers”生成连接表名称“papers_paper_boxes” 因为名称“paper_boxes”的长度,但实际上它 生成连接表名称“paper_boxes_papers”。请注意这一点 请注意,如果需要,请使用custom:join_table选项。
如果您的表共享一个公共前缀,它只会出现一次 开始。例如,表“catalog_categories”和 “catalog_products”生成连接表名称 “catalog_categories_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
规则仍然相同。使用 Rails 5 ,我们有了一个新的帮助器来创建具有迁移的连接表:
class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[5.0]
def change
create_join_table :developers, :projects
end
end
=&GT; Edge docs for Rails
答案 2 :(得分:2)
必须按字母顺序创建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
答案 3 :(得分:1)
新的create_join_table迁移会创建一个没有相应模型的连接表,因此模型名称不需要命名约定。
要访问连接,您必须在两个表上声明has_and_belongs_to_many,并通过创建的关联访问它们。