2015-10-01 3 views
-1

я вставил столбец в MySQL, используя мой терминал, то в рельсах я пытался получить столбцы,Как обновить соединение с базой данных

puts (Class.new(ActiveRecord::Base) { self.table_name = 'sample_tables'}).column_names 

, но он не будет отображаться вставленный столбец. Мне нужно сначала обновить мои рельсы, чтобы показать это. Какой код нужно добавить, чтобы обновить соединение до получения столбцов?

Я проверил его, используя rails c. Заранее спасибо за помощь.

Кстати, я попробовал этот

(Class.new(ActiveRecord::Base) { self.table_name = 'sample_tables'}).reload 

, но это не работает.

+1

Вы уже проверили этот пост? http://stackoverflow.com/a/9728033/4339299 –

+0

Вы добавили столбец, используя миграцию Rails, или попытались запустить DDL через клиент mysql? – MarsAtomic

+0

Я не совсем уверен, но вы снова запускаете свои миграции после редактирования своей базы данных. –

ответ

1

Метод «column_names» выбирает имена только один раз и после возвращения старых значений.

def column_names 
    @column_names ||= columns.map { |column| column.name } 
end 

http://apidock.com/rails/ActiveRecord/Base/column_names/class

Попробуйте использовать метод "reset_column_information" для очистки @column_names http://apidock.com/rails/ActiveRecord/Base/reset_column_information/class

+1

И если это приложение Rails 3, вы должны выполнить 'YourClass.connection.schema_cache.clear!' –

+0

Я использую Rails 4.2.3 .. безопасно ли запускать этот 'connection.schema_cache.clear!'? Безопасно ли очищать кеширование столбцов при запуске приложения rails? –

+1

Определенно безопасность, это только очистка переменных только за 4 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaCache.html#method-i-clear-21 https://github.com/rails/rails /blob/4e83815ce991efce2b84aa570f6673227ff0bb0d/activerecord/lib/active_record/connection_adapters/schema_cache.rb#L55-L61 –