Я создаю код рельсов, который мог бы добавить/удалить поле модели.Рельсы: используйте перезагрузку! в контроллере
Я модельную Inventory, где я мог бы добавить список полей, как показано ниже:
def update_new_fields
@fieldnames = params["fieldnames"]
@fieldnames.each do |fieldname|
ActiveRecord::Migration.add_column(Inventory, fieldname, :string)
end
end
Чтобы просмотреть список измененных полей
def index
reload!
@fields=Inventory.attribute_names
respond_to do |format|
format.html
end
end
Однако, у меня есть следующие ошибка:
undefined method `reload!' for #<InventoriesController:0x007fccf70b7720>
Если бы я сделал перезагрузку! в консоли:
2.0.0 :163 > ActiveRecord::Migration.remove_column(Inventory, "f", :string)
-- remove_column(Inventory(id: integer, name: string, description: string, quatity: integer, created_at: datetime, updated_at: datetime, a: string, b: string, c: string, e: string, f: string), "f", :string)
(122.9ms) ALTER TABLE `inventories` DROP `f`
-> 0.1232s
=> nil
2.0.0 :164 > Inventory.reset_column_information
=> nil
2.0.0 :165 > Inventory.attribute_names
=> ["id", "name", "description", "quatity", "created_at", "updated_at", "a", "b", "c", "e", "f"]
2.0.0 :166 > reload!
Reloading...
=> true
2.0.0 :167 > Inventory.attribute_names
=> ["id", "name", "description", "quatity", "created_at", "updated_at", "a", "b", "c", "e"]
Это работает.
UPD
Что я узнать, есть, после того, как Фоинг в "Inventory.reset_column_information", то attribute_names были не обновляется, но информация Класс:
2.0.0 :090 > Inventory.reset_column_information
=> nil
2.0.0 :091 > Inventory.attribute_names
=> ["id", "name", "description", "quatity", "created_at", "updated_at", "hello", "next"]
2.0.0 :092 > Inventory
=> Inventory(id: integer, name: string, description: string, quatity: integer, created_at: datetime, updated_at: datetime, a: string, b: string, c: string, d: string)
Итак, работа вокруг я сделал это:
def index
Inventory.reset_column_information
tmp = Inventory.new
@fields=tmp.attribute_names
respond_to do |format|
format.html
end
end
И, наконец, мое поле в инвентаре обновляется.
Здесь будут драконы ... – spickermann
Некоторые, когда я это сделал, он работает. 'Индекс четкости Inventory.reset_column_information TMP = Inventory.new @ полей = tmp.attribute_names respond_to делать | формат | format.html end end' –