A と B の 2 つのテーブルがあります。A と B には外部キーがあります。どちらもアクティブレコード。
class A
has_one :b
def valueRendered
b.value1 || b.value2
end
end
class B
( belongs_to :a, :foreign_key => :keyb ) if self.b
end
ここで、A の valueRendered メソッドからの値は、value1 が null の場合、B のフィールド value2 からの値を持っています。valueRendered を使用してテーブルをソートする必要があります。つまり、テーブルは value1 と value2 の両方の値に基づいてソートする必要があります。どうやって進める?
編集:より具体的には、フィールド「value1」の値を持つ1つの計算列(レールのメソッド)があるとしますが、value1がnullの場合、値は「value2」から取得されます。この計算フィールド (メソッド) に関して、テーブル全体 (特定のレコード数やスコープに限定されない) を並べ替えたいと考えています。どう進めていいのか迷っています。
もう少し編集:実際のサンプルコード
コントローラーでは、
sort_fields = ['offer_orders.id','offers.name','offer_orders.created_at',
'offer_orders.country', 'offer_orders.ip_address',
'fraud_score_daily.adjusted_fraud_probability, fraud_score_daily.fraud_probability',
'players.email','players.account_status',
nil,
nil,
nil,
nil
]
arel = OfferOrder.includes(:offer, :player, :fraud_score_daily).group('fraud_score_daily.offer_order_id').order('dt desc')
arel = paginate_table_data(arel, :sort_fields => sort_fields)
paginate_table_data メソッドはヘルパーにあります
def paginate_table_data(arel, opts={})
opts.assert_keys(:required => [:sort_fields])
@page_size = page_size
@current_page = current_page
arel.paginate(:page => @current_page, :per_page => params[:iDisplayLength]).
order(order_by(opts[:sort_fields]).join(', '))
end