为什么我们需要在HABTM中显式定义连接表?
问题描述:
我不明白当rails有足够的智能来完成大部分的工作,而不是为什么我们需要在使用has_and_belongs_to_many
关联时明确定义连接表?为什么我们需要在HABTM中显式定义连接表?
答
Rails在这里也很聪明。您并不总是必须将连接表的名称告诉Rails; Rails有足够的智能来解决它。你只需要创建一个迁移来生成表,所有其他的任务将由Rails处理。
比方说,你有以下两个表:
作者
书
的作者很多书,一本书是由许多作者撰写。 Rails将自动地 preiect连接表名称: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
请记住,它不一定总是这样。您也可以更改表名称。
答
我想你只是考虑从数据库主题阅读正常形式。
如果Rails没有has_and_belongs_to_many
的连接表,那么对于相同的记录将会有多个条目违背正常形式。这是一个guide只是为了回想起事情。
你说的是迁移,对吗?这是一个真正的问题还是更多的评论?你不必在ruby-code中指定它,但你必须首先在数据库中构建它。 – nathanvda