Добавление/обновление столбца в модели с помощью RubyMine

Я работаю над веб-приложением, которое в основном взаимодействует с таблицей БД через форму. Недавно мне пришлось внести некоторые изменения, в результате которых я добавил еще один столбец в таблицу БД. Я использую RubyMine для разработки и не могу понять, как обновить модель, чтобы она содержала новый столбец. Я добавил его внутри модели так:

class Student < ActiveRecord::Base
attr_accessible :f_name, :floor_pref, :l_name, :is_active

validates_presence_of :f_name, :floor_pref, :l_name
end

Я также добавил его в schema.rb:

ActiveRecord::Schema.define(:version => 20130620140537) do

create_table "students", :force => true do |t|
t.string   "f_name"
t.string   "l_name"
t.string   "floor_pref"
t.boolean "is_active"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

end

А также внутри миграции так:

class CreateStudents < ActiveRecord::Migration
def change
create_table :students do |t|
  t.string :f_name
  t.string :l_name
  t.string :floor_pref
  t.boolean :is_active

  t.timestamps
end
end
end

Проблема в том, что когда я запускаю консоль rails и ищу свой объект модели, он не показывает новый столбец, который я добавил (: is_active). Он показывает только старые столбцы:

>> Student
Loading development environment (Rails 3.2.13)
Switch to inspect mode.
Student(id: integer, f_name: string, l_name: string, floor_pref: string, created_at:    datetime, updated_at: datetime)

Что мне не хватает?


person Nick    schedule 18.07.2013    source источник


Ответы (3)


Что вы должны знать, так это удалить все изменения, которые вы добавили в модель app/models/Student.rb и в db/schema.rb

Затем вы должны перейти к своему терминалу/консоли и ввести

$ rails g migration add_column_name_to_student column_name:type

Эта команда создаст новый файл в папке db/migrate/.

$ rake db:migrate

После обновления схемы базы данных с помощью rake db:migrate. Перейдите в ваше приложение/модели/Student.rb и добавьте новое имя_столбца в attr_accessible, если вы хотите установить это значение по форме.

Вся эта процедура не имеет ничего общего с вашей IDE.

Вот некоторые другие ресурсы, где вы можете получить информацию о том, как добавить новый столбец в модели.

Создавайте миграции Rails, которые автоматически добавляют ваше изменение Rails 3: как добавить новое поле в существующую таблицу базы данных

Вам определенно следует избегать добавления новых столбцов так, как вы это сделали. Это грязно и затрудняет поддержку вашего кода.

person Tom Hert    schedule 18.07.2013
comment
Для первой команды я должен использовать именно этот синтаксис или его нужно изменить? - person Nick; 18.07.2013
comment
Нет, вы должны заменить column_name своим фактическим именем столбца :), так что, например, в вашем случае это будет rails g migration add_l_name_to_student l_name:string - person Tom Hert; 18.07.2013
comment
Я сделал то же самое, за исключением того, что столбец, который я добавляю, является логическим. Когда я запускаю эту команду, я получаю неопределяемую переменную или метод «логический» для main: Object - person Nick; 19.07.2013

Это неправильный способ добавления нового столбца в таблицу. Вы хотите открыть консоль и выполнить следующую команду после rails g migration add_column_name_to_table column_name:type, а затем запустить пакет exec rake rake db:migrate. Нехорошо просто засовывать вещи.

person David    schedule 18.07.2013

Пример: если я хочу добавить столбец postedon в таблицу сообщений, то:

rails g migration AddPostedOnToPosts  posted_on:date

Это автоматически добавит столбец в ваш файл миграции.

person Venkatesh Dhanasekaran    schedule 04.10.2014