为什么我们需要在HABTM中明确定义连接表?

时间:2015-06-22 07:15:29

标签: ruby-on-rails

我不明白rails是否足够聪明,可以自行完成大部分内容,而不是为什么我们需要在使用has_and_belongs_to_many关联时明确定义连接表?

2 个答案:

答案 0 :(得分:1)

我认为你只是考虑从数据库主题中阅读普通表格。

如果Rails没有has_and_belongs_to_many的联接表,那么同一记录的多个条目将违反正常形式。这是guide只是为了回忆起事情。

答案 1 :(得分:0)

Rails在这里也很聪明。您不必总是将连接表的名称告诉Rails; Rails非常聪明,可以解决这个问题。您只需要创建一个迁移来生成表,Rails将会处理所有其他任务。

假设您有以下两个表:

  1. 作者

  2. 一位作者撰写了许多书籍,一本书由许多作者撰写。 Rails将自动预测连接表名称:authors_books - 您只需编写迁移即可创建它。

    然后,任务很简单。

    author = Author.first
    author.books # all the books authored by the first author
    
    book = Book.first
    book.authors # all the authors of the first book
    
    new_book = Book.new
    author.books << new_book # add a new book to an author
    author.save
    
    new_author = Author.new
    books.author << new_author # add a new author to a book
    

    请记住,它不一定总是这样。您也可以更改表名。