我陷入了一个非常奇怪的问题。我的项目是我使用' load_and_authorize_resource'为了从数据库中检索信息。 更确切地说,我有ItemsController和action #index。在这个动作中,我有一个类ActiveRecord :: AssociationRelation的实例变量@items。如果我将任何参数传递给动作索引(例如,ID数组),它将自动合并到此变量。但! @ items.to_sql返回以下内容:
SELECT "items".* FROM "items" WHERE "items"."user_id" = $1
因此,由于查询中的这个奇怪变量,我的一些代码只是因为w" $ 1"。我需要的是用来自params的实际值替换此变量。当然,我找到了一个解决方案(黑客):
@items.where_values.each{ |node| node.right = params[:user_id] if node.left.name = 'user_id' }
但实际上我并不想做这样的黑客行为。也许你们知道如何用params [:user_id]替换$ 1?提前谢谢你。
控制器代码:
class ItemsController < ApplicationController
load_and_authorize_resource :items
def index
ArchiveWorker.archivate(@items)
end
end