2

を使用して Recipe モデルの 1 つの列を検索できる検索フォームがあります。

@countrysearch = Recipe.where(:dish_name => params[:search]).all

そのため、ラザニアなどの料理を検索すると結果が得られますが、レシピ モデル内の別の 3 つの列、country_of_origin、難易度、preperation_time を検索できるようにしたいと考えています。

私はこれを試しました

@countrysearch = Recipe.where({:dish_name => params[:search], :country_of_origin => params[:search], :difficulty => params[:search], :preperation_time => params[:search]}).all

しかし、これもうまくいかないようです

誰でも提案できますか?

4

1 に答える 1

3

あなたのコードは使用してANDいますが、あなたはOR私が思うことを望みます:

@countrysearch = Recipe.where("dish_name = ? OR country_of_origin = ? OR difficulty = ? OR preperation_time = ?",
    params[:search],
    params[:search],
    params[:search],
    params[:search]
)

SQL文字列を使用したくない場合は、arel_table:を使用できます。

at             = Recipe.arel_table
search         = params[:search]
@countrysearch = Recipe.where(at[:dish_name].eq(search).or(at[:country_of_origin].eq(search)).or(at[:difficulty].eq(search)).or(at[:preperation_time].eq(search)))

しかし、Railsの現在のバージョンでは、最初の方法の方が読みやすいので、最初の方法をお勧めします。Rails 5では、この種のクエリに対してより優れたメソッドがあります。(これが利用可能になったら、この投稿を更新します。)

于 2012-11-09T22:24:05.423 に答える