アプリケーション用の一般的な並べ替えライブラリを作成しようとしていますが、いくつかの問題が発生しています。私の中には、class WorkOrder
次のようなスコープ定義があります。
scope :join, lambda {|join_model, sort_direction, sort_by| {:joins => join_model, :order => sort_by + " " + sort_direction}}
はjoin_model
、渡されたパラメーターに基づいてソートされたリストをモデルに要求するコントローラーにパラメーターとして渡されます。シンプルな...
@work_orders = @order.work_orders.join_to({:product_configuration => :product}, "ASC", "item").all
belongs_to :product_configuration
これは、 WorkOrdersおよび ProductConfigurationsとして非常にうまく機能しますbelongs_to :product
。
しかし、次のように呼び出したい場合:
work_orders = @order.work_orders.join_to("worker", "ASC", "item").all
また
work_orders = @order.work_orders.join_to(:worker, "ASC", "item").all
エラーが発生します。WorkOrders について知りたいと思います。belongs_to :worker
要約すると、に行こうとするとhttp://localhost:3000/foo?direction=ASC&join_to=worker&sort=name
、次のエラーが表示されます。
ActiveRecord::StatementInvalid in FooController#index
PG::Error: ERROR: invalid reference to FROM-clause entry for table "work_orders"
LINE 1: SELECT "work_orders".* FROM "work_orders" worker WHERE (work...
私はRubyとRailsにかなり慣れていないので、何か提案をいただければ幸いです。
アップデート
スコープ定義を次のように変更すると
scope :join, lambda {|join_model, sort_direction, sort_by| {:joins => join_model.to_sym, :order => sort_by + " " + sort_direction}}
http://localhost:3000/foo?direction=ASC&join_to=worker&sort=name
に移動してもエラー メッセージは表示されませんが、に移動するとエラー メッセージが表示されますhttp://localhost:3000/pretzel?direction=ASC&join_to%5Bproduct_configuration%5D=product&sort=item
エラーメッセージは
undefined method `to_sym' for {"product_configuration"=>"product"}:ActiveSupport::HashWithIndifferentAccess