web-dev-qa-db-ja.com

Railsの列名のエイリアス

私のデータベースには、「delete」や「​​listen-control」などの列名があります。これらは変更できないため、アプリケーションの問題を回避するために、名前にエイリアスを付けたいと思います。

次のコード が見つかりましたが、それは時代遅れ(2005年8月5日)であり、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

列名をエイリアスするにはどうすればよいですか?出来ますか?

63
user486421

これをモデルで宣言します。

alias_attribute :new_column_name, :column_name_in_db
142
Shreyas

ハイメが言ったように、これらの名前は問題を引き起こす可能性があります。

その場合、適切な名前を使用してください。 GUIで列の名前を指定することはできません。

提案:is_deletedまたはdeleted_atlisten_control

次に、それに応じてビューを変更します。これは、ActiveRecordとデータベースと戦うよりもずっと簡単です。

0
Ariejan