2016-07-01 7 views
0

私は名前の位置で既存のデータベーステーブルを持っていますが、場所apiはレールに組み込まれています。データベースのカラム名とは異なるパラメータ名を持つapiをレールに作成する

deviceid | servertime | latitude | longitude | altitude | speed | address 

をし、場所APIは

device_id | created_at | lat | lon | altitude | gps_speed | address 

は、今私は私の場所APIの位置のデータベーステーブルを使用したい、次のパラメータを持って、私は次のマッピングを作成したい:ポジションテーブルには、次の列があります。それらの間:

Database Table Name | API Paramater Name   
1) Speed    | gps_speed 
2) Latitude   | lat 
3) Longitude   | lon 
4) deviceid   | device_id 
5) servertime  | created_at 
6) altitude   | altitude 
7) address   | address 

は、誰もがポジションテーブルのこれらの列の値は、これらのparamにマッピングすることができるように、私はこのマッピングを作成する方法を教えてくださいすることができ場所のeter?

+0

ほとんどの場合、それらの間に何が起こっているかによって異なります。 JSONをレンダリングしていて、その時点でマップしたい場合は、JSONをシリアル化するために使用しているものによって異なります。モデルレベルで処理を実行したい場合は、APIパラメータごとにモデル上にメソッドを作成することができますが、アクティブレコードを使用するクエリでもdb名が必要です –

+0

モデルレベルでマップしたいので、 else(コントローラ、ビュー、シリアライザなどで)私はapiパラメータ名で動作します。 –

+0

dbカラムの名前を変更できない理由はありますか?しかし、それ以外に方法がないとわかりません –

答えて

0

これは、カスタムエイリアス属性をモデルに追加することで実現できます。このファイルをactive_record_extension.rbファイル名の 'initializers'フォルダに追加します。

module ActiveRecordExtension 
extend ActiveSupport::Concern 

    module ClassMethods 

    def alias_attribute_method(new_name, old_name) 
     self.alias_attribute(new_name, old_name) 
     self.alias_attribute("#{new_name}=", "#{old_name}=") 
    end 

    end 
end 

ActiveRecord::Base.send(:include, ActiveRecordExtension) 

モデル内にalias_attribute_methodメソッドを追加できます。これはCRUD操作も処理します。追加メソッドを追加することで、パフォーマンスへの影響はなく、無視できます。

alias_attribute_method :gps_speed, :speed 
alias_attribute_method :lat, :latitude 
関連する問題