2016-11-15 5 views
1

関係:テーブルには多くのユーザーがいます。jsonレスポンスのキーをカスタマイズする方法は?

私のように関連付けられているユーザとテーブルの詳細を印刷するには、「含まれる」使用しています:

Table.includes(:users) 

しかし、私は、ユーザーのための条件を使用している場合は、言う、などusers.active:

Table.includes(:users).where(:users => { active: true }) 

私はアクティブなユーザーでテーブルを取得しています。それはうまくいく。しかし、表にアクティブなユーザーがいない場合は、空を戻します。 アクティブなユーザーがいなくてもテーブルの詳細を出力する必要がありました(その場合はユーザー部分を除く)。つまり、アクティブなユーザがいる場合、それはテーブルに沿って印刷されなければならず、テーブルのみが印刷されなければならない。 だから私は、モデルのフィルタ方法を書いた:

has_many :active_users, class_name: "User", :conditions => { active: 'yes'} 

そして、コントローラで:Table.includes(:active_users)。 JSONレスポンスのために今すぐ

、:

render :json => { :table => @table.as_json(:include => :active_users) } 

ので、キーが "ACTIVE_USERS" として提供されます。

しかし、私はそのキーを「ユーザー」として持ちたいと思っています。誰もゾルを提案することはできません。

TIA!

答えて

0
私は、ユーザーがあなたが機密情報を公開しないように属性をホワイトリストをお勧めしたいユーザー

def as_json(opts={}) 
    super.merge(
    users: active_users.as_json(only: [:id, :username, ...] 
) 
end 

を含めるようにTable#as_jsonをオーバーライド

関連する問題