0

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
4

1 に答える 1

1

次のようなものはどうですか:

scope :order_by_value_rendered, joins(:b).order("value1, value2")
于 2013-03-12T10:27:04.943 に答える