2010-09-19 2 views
0

Я попытался создать миграции БД в Rails, который выглядел примерно так:Почему Rails игнорирует мое поле user_id?

 
ruby script/generate scaffold post user_id:int title:string content:text 

Глядя на результирующей .rb файл, достаточно точно, я видел все, что я вошел:

class CreatePosts < ActiveRecord::Migration 
    def self.up 
    create_table :posts do |t| 
     t.int :user_id # there it is: user_id 
     t.string :title 
     t.text :content 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :posts 
    end 
end 

Но после запуска rake db:migrate и проверки моей базы данных, я вижу, что не был создан столбец user_id. Что здесь случилось?

ответ

3

Потому что это должно быть t.integer, а не t.int. Смотрите docs for more details:

add_column(table_name, column_name, type, options): Добавляет новый столбец в таблице называется table_name именем column_name указанный быть один из следующих типов: :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean.

+0

Черт, у меня было чувство *, это было бы что-то простое. Благодаря! (Я отвечу на этот ответ через 10 минут.) –

+0

@ Dan Это круто, приветствия :) – Skilldrick

+0

Это всегда меня било. Почему миграция не вызывает исключение из недопустимого типа столбца? – zetetic

3

Вы также можете использовать:

t.references :user 

и это создаст целое поле с именем user_id. Я лично предпочитаю этот метод, потому что он ссылается на внешний ключ.

Смежные вопросы