1

この質問Rails gem rails3-jquery-autocomplete: How do I query multiple fields で説明されているように、rails3-jquery-autocomplete gem のため、データベースをクエリしようとしています。

User.select("first_name, last_name, login, id").where(["CONCAT_WS(' ', first_name, last_name, login) LIKE ?", "%#{parameters[:term]}%"])

これは必要なことには問題なく機能しますが、Rails アプリ内に明示的な MYSQL コードを含めるのは汚いと感じており、上記のクエリを作成するデータベースに依存しない方法があるかどうか疑問に思っていましたか? そうでない場合、ある種の連結関数をサポートしていないデータベースはありますか?

gem がデータベースにクエリを実行する必要があるため、仮想属性を使用できません。

または、full_name という追加の列を User モデル自体に追加し、仮想属性を使用してそれを first_name と last_name に分離するつもりでしたが、別の解決策を好むでしょう。

4

2 に答える 2

2

wkahaさん、アドバイスありがとうございます。それはかなりばかげた質問だったことがわかりました。ActiveRecord を読んだ後、私にとって重要な LIKE 修飾子を使用してクエリを実行する方法がないことがわかったので、そのままにしておきました。Postgres に切り替える場合に備えて、パイプ連結に変更します。

于 2012-06-22T20:32:33.167 に答える
2

私はあなたがやっているようにそれをしたいと思います。仮想属性は、私には非常に優れたソリューションのようです。したがって、アプリケーション ロジックからデータベースを切り離すことができます。データベースのバックエンドを変更することを考えてください。

私見では

それ以外の場合 - エイリアスを使用した選択フィールドの連結は機能していますか?

concate( firstname, ' ', ... ) as virtualfieldname ... のようなものですか?

于 2012-06-20T08:00:31.980 に答える