2015-04-21 5 views
0

Я немного одурманен тем, как создать объединенную таблицу в ROR.Запутанная таблица путаницы - Ruby on Rails

Допустим, есть 2 таблицы:

  • пользователя
  • Книга

Для создания присоединяемой таблицы user_book, мое первоначальное впечатление, что вы сделали это:

rails g migration user_book 

Но мне сказали, что для создания фактической объединенной таблицы я генерирую фактическая модель:

rails g model user_book 

Это правильно?

И если второй правильный, то как только я его создал, я открою его и добавлю в файл переноса book_id и user_id, а затем запустим команду rake db:migrate. Это верно?

EDIT:

Просто хотел добавить, что

модель Пользователь будет иметь это: has_many :books, through: :user_book

Книга модель будет иметь следующее: has_many :users, through: :user_book

+0

ИМХО, есть два способа: вы либо создать модель без таблицы, которая соответствует многим многое или что у вас есть, или создать фактическую таблицу (в случае, если у вас есть дополнительные атрибуты, целостность которых вы должны гарантировать на уровне db). Таким образом, в обоих случаях вы должны создать модель, но только во втором случае вам потребуется миграция , – potashin

+0

Нет такой вещи, как «объединенный стол». Соединение - это то, что происходит, когда вы запрашиваете таблицу, а не то, что происходит при создании таблицы. Я рекомендую прочитать руководство по [Active Record Associations] (http://guides.rubyonrails.org/association_basics.html) Rails Guide, в котором расскажут вам, как создавать ассоциации между моделями и основы миграции. –

ответ

0

Если вы хотите использовать has_many through:, что вам нужно a table to handle that. А также модельный объект для представления этой таблицы.

Как вы собираетесь его создавать (rails g model или rails g migration), в конечном итоге не имеет значения. Все эти команды - это создать либо модель И файл миграции, либо только файл миграции. Лично я бы сделал rails g model, так как вам нужны оба.

Вы только что добавили таблицу user_books с 2 идентификаторами, user_id и book_id.

Миграция будет выглядеть примерно так:

class CreateUserBooks < ActiveRecord::Migration 
    def change 
    create_table :user_books do |t| 
     t.references :user, index: true, foreign_key: true, null: false 
     t.references :book, index: true, foreign_key: true, null: false 
     t.timestamps null: false 
    end 
    end 
end 

модели будет выглядеть следующим образом:

class User < ActiveRecord::Base 
    has_many :user_books 
    has_many :books, through: :user_books 
end 

class Book < ActiveRecord::Base 
    has_many :user_books 
    has_many :users, through: :user_books 
end 

class UserBook < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :book 
end