Как переопределить ассоциации столбцов атрибутов по умолчанию для activerecord? - PullRequest
1 голос
/ 22 июля 2009

Я работаю над устаревшей базой данных, которая совершенно бессмысленна. У меня есть таблица с именем movie, которая содержит столбцы с именами, такими как c00, c01, c02 и так далее. В таблице также используются нестандартные primary_keys. Итак, я создал класс под названием фильм, как это:

class Movie < ActiveRecord::Base
  set_table_name "movie"
  set_primary_key "idMovie"

  belongs_to :media_file, :foreign_key => "idFile" 

  def title
    self.c00
  end

  def plot
    self.c01
  end
end

Я хотел бы иметь возможность сделать что-то вроде Movie.find_by_title ("Крепкий орешек") и заставить его вернуть правильный результат. Также я хотел бы иметь возможность сказать Movie.create (: title => «Крепкий орешек»). Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 22 июля 2009

Я думаю, что вы хотите alias_attribute. Проверьте отличную презентацию Брайана Хогана от RailsConf в этом году.

0 голосов
/ 22 июля 2009

Вам действительно нужно сочетание ответа Сары и ответа Бена :

class Movie < ActiveRecord::Base

  # gives you Movie.find_by_title
  # and lets you chain with other named scopes
  named_scope :find_by_title, lambda { |title| { :conditions => { :c00 => title } } }

  # gives you
  #   movie.title
  #   movie.title=(title)
  # and
  #   Movie.new(:title => title)
  alias_attribute :title, :c00

end
0 голосов
/ 22 июля 2009

Методы find_by_ * используют рефлексию, так что этого не случится с Rails "из коробки". Конечно, вы можете определить свои собственные методы:

def self.find_by_title(title)
    first(:conditions => { :c00 => title })
end

Следующим шагом будет перебор хеша column_aliases => real_columns для использования в качестве фидера для вызовов alias_attribute и define_method.

...