ПРИМЕЧАНИЕ: Пожалуйста, ознакомьтесь с обновленным решением в конце этого ответа.Оставляя оригинальное устаревшее решение по историческим причинам.
Это встречается достаточно часто (устаревшие имена столбцов, взаимодействующие с ruby / rails), что я мог бы просто сделать из этого плагин.Вот как вы можете это исправить сразу же.Создайте этот файл в своем приложении:
# lib/bellmyer/create_alias.rb
module Bellmyer
module CreateAlias
def self.included(base)
base.extend CreateAliasMethods
end
module CreateAliasMethods
def create_alias old_name, new_name
define_method new_name.to_s do
self.read_attribute old_name.to_s
end
define_method new_name.to_s + "=" do |value|
self.write_attribute old_name.to_s, value
end
end
end
end
end
А теперь в вашей модели:
class Member < ActiveRecord::Base
include Bellmyer::CreateAlias
create_alias 'class', 'class_name'
end
Первый параметр create_alias - это имя старого метода, а второй - новыйимя, которое вы хотите назвать, это не будет мешать рельсам.В основном он использует методы read_attribute
и write_attribute
для взаимодействия со столбцом вместо методов ruby, которые определяются ActiveRecord.Просто обязательно используйте новое имя для поля везде, например так:
member.class_name = 'helper'
Это работает с ruby 1.8, но я еще не тестировал с ruby 1.9.Надеюсь, это поможет!
ОБНОВЛЕНИЕ: Я нашел лучшее решение, которое работает в Rails 3, гем safe_attributes.Я написал сообщение в блоге, объясняющее, как его использовать, с примерами фрагментов кода и полным примером приложения, которое вы можете скачать с github и поиграть с ним.Вот ссылка:
Старые имена столбцов базы данных в Rails 3