我正在嘗試爲我的應用程序編寫一個通用的排序庫,並且遇到了一些問題。我有我的class WorkOrder
內的範圍定義,看起來像這樣:將參數傳遞給作用域定義Ruby on Rails
scope :join, lambda {|join_model, sort_direction, sort_by| {:joins => join_model, :order => sort_by + " " + sort_direction}}
的join_model
作爲一個參數去誰問基於params中傳遞的排序列表模式控制器傳遞。夠簡單了...
@work_orders = @order.work_orders.join_to({:product_configuration => :product}, "ASC", "item").all
這工作得很好的工作訂單belongs_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
我得到一個錯誤。我相信你要知道,工作訂單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
名稱prularized表,你使用它與'workers'試過嗎? – Matzi 2012-08-17 10:14:37
謝謝@Matzi!但是這不起作用,因爲這不是SQL命令,而是一個rails範圍定義。 – Shawnzam 2012-08-17 15:32:17
您正在使用哪個版本的Rails? – Brandan 2012-08-17 15:48:43