2012-03-02 6 views
6

既存のデータベースの周りにレールアプリを構築していますが、既存のデータベースで使用されている列名はレール協会ではうまく機能しません。道に似たモデルで、列名のエイリアスを設定する方法はありますすることができますレールモデルに列名を手動で設定します

class User < Activerecord::Base 
self.set_table_name "users" 
end 

既存のDBの列は、デフォルトのレール協会が命名規則では動作しないとき、私は列名のエイリアスを設定してもらえますか?

答えて

13

モデルでは、属性(列)のエイリアスを設定するだけです。たとえば、次のように

class User < Activerecord::Base 
    alias_attribute :new_column_name, :real_column_name 
end 
+0

ありがとうございました。 – holaSenor

+0

私はまた、この件名に関連するいくつかのポインタでこのブログを見つけました.http://nasir.wordpress.com/2007/10/24/not-following-rails-table-and-field-conventions/ – holaSenor

+1

ダイナミックファインダーはしかし、動作しません。 クイックテスト: 'alias_attribute:試験: ' User.find_by_username( 'ABC')id' '=> 32' 'User.find_by_test( 'ABC')id' username' 'NoMethodError:未定義のメソッド 'find_by_test for#' – Zheileman

2

あなたは(つまり、あなたのレールのアプリがそれを参照している)データベースの列を変更することができるならば、あなたがRENAME_COLUMNメソッドを使用して移行を書くことができます。あなたがレール3を使用しているので、あなたは、単に明らかにあなたのための最高の作品何への一般的なネーミングを置き換える

~: rails g migration RenameColumnNameToNewColumn columnName:columnType

次のコマンドを使用することができます。これは、次のようになりますあなたのための移行を作成する必要があり、それがない場合、あなたはに列名を変更することができない場合は

class ChangeOldColumnToNewColumn < ActiveRecord::Migration 
     def up 
      rename_column :tableName, :oldColumn, :newColumn 
     end 

     def down 
      rename_column :tableName, :newColumn, :oldColumn 
     end 
end 

以下のコードに似ていますし、それを修正します実際のテーブルでは、これに似た行をモデルに配置して、実行しようとしていることを達成できるはずです。

alias_attribute :newColumnName, :existingColumnName 

列名が混乱しているレールの場合は、existingColumnNameを二重引用符で囲む必要があります。

+0

私はこれを試してみるつもりですが、Zheilmanは動作がうまくいかないことがあります。混乱するかもしれません。私は、新しいレールデータベースに必要なデータをETLし、接続するためにestablish_connectionを使用します。 – holaSenor

+0

それは彼が育った興味深い点です、私はこれがあなたのために終わる方法を聞くのが大好きです。 – coderates

+1

これらの列の名前を変更することができれば、それは確かに行く方法です.Railsは規則からうまくいきませんし、長期的にはあまりにも多くのことを「やりすぎる」ことになります。 それはデータベーススキーマに対してどれくらいのコントロールを持っているのか、そしてそれが何回「間違った列」になっているかによって変わります。 – Zheileman

関連する問題