0

私は次のようにActiveRecordの条件を生成しています:

  query = {:status => status}

  if (limit)
    query[:limit] = @vals['limit'].to_i
  end

  if (offset && limit)
    query[:offset] = (offset - 1) * limit
  end

  rows = Review.all(query)

これは問題なく機能します。レビューの「ステータス」でフィルタリングし、渡された場合は制限とオフセットを入力します。問題は、レビューのコンテンツフィールドに「nullではない」のチェックを追加する必要があることです。IE AND review.content!='' && review.content!= nil

私はあなたが次のようなことをすることができることを読みました

Review.were("review <> ''")

これ自体は機能しますが、それを上記のコマンドに組み込む方法がわかりません。または、上記のコマンドを変更して、「all」ステートメントではなくwhereステートメントで機能するようにします。

4

1 に答える 1

2

私はそのコードを次のように書きます

query = Review.where("status = ?", status).where("review <> '' AND review IS NOT NULL")

if limit.present?
  query = query.limit(limit) 
  if offset.present?
    query = query.offset((offset - 1) * limit)
  end
end

rows = query.all

railsクエリオブジェクトは遅延評価を行うため、クエリを構築できます。行の反復を開始するまで、データベースにSQLは発行されません。

代替.where("review <> '' AND review IS NOT NULL")

.where("COALESCE(review, '') <> ''")

于 2013-03-23T19:35:50.123 に答える