Rails Active Recordクエリで動的順序付けメソッドを適用する際に問題があります。フィールドと方向による順序は、要求パラメータに基づいて動的です。それらを文字列として指定すると、あいまいなフィールド名でトリップされます。シンボルとして指定するときは、それは問題ありません。このクエリをシンボルで動的に作成するにはどうすればよいですか?Rails/ActiveRecord Order文字列対シンボルの問題
この:SELECT DISTINCT "projects"."id", id AS alias_0 FROM...
で
subject = subject.order('id desc')
結果とPG::AmbiguousColumn: ERROR: column reference "id" is ambiguous
エラーになります。
この使用してシンボルを指定する場合、アクティブレコードが正しく曖昧させずにすべて一緒にそれを置く:
subject = subject.order(id: :asc)
それでは、どのように私は変換することができますまたは動的にこの方法を使用する、など:
subject = subject.order(params[:order_by] + ' ' + params[:order_direction])
サイド注:私は、問題(複数のid
フィールド)に貢献していると仮定しているクエリの他の場所で起こっている結合や他の複雑さがありますが、再びアクティブレコードのシンボルとして、それはすべて適切に数字です。また、上記のparamsの例のorder_by
とorder_direction
はホワイトリストに登録されているため、SQLインジェクションは問題になりません。
けれども、これは、AmbiguousColumnエラーを防ぐことができますことを確認してください、ありがとう! – Ryan