2016-07-04 5 views
1

私はid columnが含まれていないモデルを手に入れようとしています。私は方法selectがこれを可能にすると思うが、私がモデルにアクセスするとき、nil値を持つidフィールドを見る。rails:JSONレスポンスでオブジェクトの配列から特定のプロパティを削除する方法はありますか?

私が使用:

module API 
    class MyController < ActionController::API 
    def index 
     response = MyModel 
       .where("value > ?", 0) 
       .select('code','value') 
     render json: response, status: 200 
    end 

Iこの

mymodelという.whereようにそれぞれを使用して結果を検査 .select( 'コード'、」(0 "の値>?")値 ') .each {| m | M}

が、私はこの

<MyModel id: nil, code: "110", value: 100> 
<MyModel id: nil, code: "111", value: 100> 
<MyModel id: nil, code: "112", value: 100> 

と私の応答で取得します私はこれを取得:

[{id: null, code: "110", value: 100},{id: null, code: "111", value: 100},{id: null, code: "112", value: 100}] 

id列を省略する方法は?

+0

なぜこれをやろうとしていますか?どのような問題を解決しようとしていますか? –

+0

@jordan私は 'MyModel'の配列を返す必要がありますが、idフィールドは含まれていません –

+0

そうです。しかし、どんな問題を解決しようとしていますか?あなたは "配列を返す"が、どこに行きたいのですか?ユースケースは何ですか?データベースから 'code'と' value'フィールドだけを選択することに成功しました。そのため、 'id'属性は' nil'です。 –

答えて

0

私はそれがコマンドで何かだと信じています。 Model.select(:attributes)しか行っていない場合は、リストにない場合はidカラムを返してはいけません(ここでテストして正常に動作します)。私はputsコマンドがデータベースなどからそのオブジェクトを取得すると信じています。あなたはselectメソッドの引数にidを使用していない場合でも、#selectメソッドを使用しているとき、それは意志、Railsではオブジェクトクラスに

+1

これは答えの実際のスポットではありません。 –

0

to_sメソッドをオーバーライドする場合はところで、あなたはputs objectを行う際に印刷されたものを上書きすることができますこれは、Railsではデフォルトで主キーがidであるために表示されます。主キーを別のものに上書きすると、その列が表示されます。例を見て:私のクーポンモデルでは、私はcodeに設定し、主キーを持っているので、

Coupon.select(:active) 
# Coupon Load (0.6ms) SELECT "coupons"."active" FROM "coupons" 
# => #<ActiveRecord::Relation [#<Coupon active: true, code: nil>, #<Coupon active: true, code: nil>... 

です。

class Coupon < ActiveRecord::Base 
    self.primary_key = 'code' 
    # .. 
end 

それはに現れているがは結果、それは、あなたがそれを実際にフェッチされるまで存在していないか点検します。テストのためにself.primary_key = ''を設定すると、#selectには何も表示されません。しかし、idディスプレイをselectの結果から削除するように、primary_key''に設定しないでください。私はちょうどそれが来るところから何かを見せたいだけでした。

Coupon.select(:active).order(:active) 
# Coupon Load (2.8ms) SELECT "coupons"."active" FROM "coupons" ORDER BY "coupons"."active" ASC 
# => #<ActiveRecord::Relation [#<Coupon active: true>, #<Coupon active: true>... 
+0

問題は、私はアプリケーションに沿ってこのプライマリキーが必要ですが、この特定のケースでは、戻り値と配列のwhere条件を必要としますが、この結果には 'id'フィールドは含まれていません。 –

+0

@GonzaloPincheiraArancibia検査では 'id'を上げますが、実際の結果には' id'値がありません。 –

関連する問題