4

古い携帯電話アプリ用の json フィードを作成する必要があり、一部のラベルをデータベースの列名とは異なるものにする必要があります。

これを行う最も効率的な方法は、データベース レベルでエイリアスを作成することだと思います。だから私は次のようなことをしています

Site.where( mobile_visible: true ).select("non_clashing_id AS clientID")

SQLを生成する

SELECT non_clashing_id AS clientID FROM `sites` WHERE `sites`.`mobile_visible` = 1 ORDER BY site_name

このクエリを MYSQL ワークベンチで実行すると、ClientID期待どおりの見出しと必要な値を持つ列が生成されます。

しかし、レールビューでオブジェクトを表示すると、{"clientID":null},{"clientID":null},{"clientID":null}

私は何を間違っていますか?これを行うより良い方法はありますか?

4

3 に答える 3

3

これは、変数にアクセスする方法を示しています

sites = Site.where( mobile_visible: true ).select("non_clashing_id AS clientID")
sites.each do |site|
  puts site.clientID
end
于 2012-06-01T13:27:55.140 に答える
2

activerecordデフォルトでは、データベースから列定義をロードすると思います。また、既存の列にのみ値をロードする必要があります。

Site.columns

その配列にもう 1 つ項目を追加できると思います。または、エイリアス列名なしで通常のクエリを使用してから、alias_attributeMurifoX のように追加してas_jsonメソッドを上書きすることもできます。

class Site < ActiveRecord::Base
  alias_attribute :client_id, :non_clashing_id

  def as_json(options={})
    options[:methods] = [:client_id]
    options[:only] = [:client_id]
    super
  end
end
于 2012-06-01T13:07:51.600 に答える
1

データベースエイリアスに加えて、これをモデルに入れてみてください:

class model < ActiveRecord::Base
  alias_attribute :non_clashing_id, :client_id
  ...
end
于 2012-06-01T12:59:30.743 に答える