我有两个表,A 和 B。A 和 B 有一个外键。两者都是 ActiveRecord。
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 为空时具有来自 B 的字段 value2 的值。我必须使用 valueRendered 对表进行排序,即表应该根据 value1 和 value2 的值进行排序。如何进行?
编辑:更具体地说,假设有一个计算列(rails 中的一种方法)具有来自字段“value1”的值,但如果 value1 为空,则该值来自“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