Псевдоним имен столбцов в Rails

В моей базе данных есть имена столбцов, такие как «delete» или «listen-control» и т. Д. Они не могут быть изменены, поэтому я хотел бы написать имена, чтобы избежать проблем в моем приложении.

Я нашел следующий код, но он устарел (05 августа 2005 г.) и не работает с Rails 3:

module Legacy def self.append_features(base) super base.extend(ClassMethods) end module ClassMethods def alias_column(options) options.each do |new_name, old_name| self.send(:define_method, new_name) { self.send(old_name) } self.send(:define_method, "#{new_name}=") { |value| self.send("#{old_name}=", value) } end end end end ActiveRecord::Base.class_eval do include Legacy end 

Как я могу переименовать имена столбцов? Является ли это возможным?

    3 Solutions collect form web for “Псевдоним имен столбцов в Rails”

    Объявите это в своей модели.

     alias_attribute :new_column_name, :column_name_in_db 

    Имена псевдонимов не решают вашу проблему. Как я уже упоминал в своем комментарии выше, вы не можете иметь тире в rubyовом методе или именах переменных, потому что ruby ​​будет интерпретировать их как «минус». так:

     object.listen-control 

    будет интерпретироваться rubyом как:

     object.listen - control 

    и потерпит неудачу. Найденный fragment кода может быть неудачным из-за ruby ​​1.9, а не рельсов. 3. Ruby 1.9 не позволяет вам звонить .send на защищенные или частные методы больше, например 1.8.

    При этом я понимаю, что времена, когда старые имена столбцов базы данных выглядят не очень красиво, и вы хотите их очистить. Создайте папку в папке 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 User < ActiveRecord::Base include Bellmyer::CreateAlias create_alias 'name-this', 'name_this' end 

    И это будет правильно. Он использует методы read_attribute и write_attribute ActiveRecord для доступа к этим столбцам таблицы, не называя их rubyовыми методами.

    Как сказал Хайме, эти имена могут вызвать проблемы.

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

    Предложения: is_deleted или deleted_at , listen_control

    Затем измените свой взгляд соответственно, это намного проще, чем борьба с ActiveRecord и вашей базой данных.

    Interesting Posts

    Классический ASP – Как преобразовать строку UTF-8 в UCS-2?

    org.apache.tomcat.util.bcel.classfile.ClassFormatException: недопустимый тег байта в постоянном пуле: 15 – Tomcat 7, JDK incompatibilty?

    MYSQL импортирует данные из csv, используя LOAD DATA INFILE

    Устойчивые сеансы по субдоменам в Laravel 5

    Android Viewpager как слайд-галерея изображений

    Преобразовать строку в тип C #

    Исключение исключений в Java без потери трассировки стека

    путают autoload_paths vs eager_load_paths в рельсах 4

    Действительно ли качество кабеля HDMI влияет на передачу?

    Обновление JButton по таймеру в цикле do-while

    Выходной разъем звука на CD-ROM?

    Gmail навсегда закручивается в Chrome, но отлично работает в Firefox

    Отключить / выключить Windows 7 Поисковая подсказка / предупреждение Баннер о индексировании

    Как найти элемент массива, который повторяется как минимум N / 2 раза?

    Как получить значения даты и времени в программе C?

    Давайте будем гением компьютера.