создание рельсов индекса user_id

как создать столбец user_id для сопоставления идентификатора одного индекса базы данных с другим?

Я знаю о has_many и own_to, но я не уверен, нужно ли мне указывать user_id при создании модели...

rails g model User name:string email:string

rails g model Card inputA:string inputB:string -- добавить user_id:integer ?

а затем добавить has_many :cards и belongs_to :user ?

или рельсы делают это автоматически, когда вы предъявляете иск has_many и belongs_to


person beoliver    schedule 17.02.2012    source источник


Ответы (3)


вы добавляете user_id:integer , потому что информация необходима для миграции, которая не зависит от моделей.

то, что вы предложили там, правильно.

person TomDunning    schedule 17.02.2012
comment
если бы мне нужно было добавить его после создания модели, как бы я тогда создал новую миграцию, а затем добавил ее? - person beoliver; 17.02.2012
comment
rails g migration add_user_id_to_cards. затем откройте этот файл миграции и добавьте add_column(:cards, :user_id, :integer) вверху и remove_column(:cards, :user_id) внизу - person TomDunning; 17.02.2012
comment
Я не думаю, что это хорошая идея для миграции, а скорее для того, чтобы узнать, как Rails обрабатывает ассоциации между моделями (поэтому я разместил ответ ниже). - person citraL; 17.02.2012

Isotope сказал, что вам нужно добавить столбец в существующую карту модели. Есть простой способ сделать это в rails, просто сгенерируйте миграцию, которая добавит столбец в вашу модель, используя:

rails generate migration add_UserID_to_cards userID:integer

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

class AddUserIDToCard < ActiveRecord::Migration
  def self.up
    add_column :cards, :userID, :integer
  end

  def self.down
    remove_column :cards, :userID
  end
end

НО... Обычно каждый пользователь уже имеет уникальный идентификатор в вашей базе данных, поэтому я не думаю, что это необходимо. Вместо этого, если вы создадите свои карты из пользователей, ссылка будет сделана автоматически. То есть, в методе создания вашего контроллера карты:

@card = current_user.cards.build(params[:card])

Это законченная тема, я предлагаю посмотреть там для начала: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html в противном случае учебник Hartl «Учебник по Rails 3» предоставляет полный пример в последних главах книги (когда он связывает микросообщения с пользователями) .

Надеюсь, это поможет !

person citraL    schedule 17.02.2012

@card = current_user.cards.build(params[:card]) 

отлично работал для меня. У меня была проблема с тем, что мой user_id не индексировался автоматически.

person Fatimah    schedule 13.08.2013