我正在尝试为我的应用程序编写一个通用排序库并且遇到了一些问题。我有一个范围定义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
这非常适用于 WorkOrdersbelongs_to :product_configuration
和 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
我得到一个错误。我确定您想知道 WorkOrdersbelongs_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