我在索引页面上有一个自定义集合操作,我想访问该操作中的过滤数据。我怎样才能做到这一点?我可以自己收藏吗?或者过滤器参数?
collection_action :do_something do
# call some async process
redirect_to :action => :index, :notice => "started working!"
end
action_item :only => :index do
link_to('DO WORK', do_something_admin_game_stats_path)
end
答案 0 :(得分:3)
您应该将scope
和filter
参数作为link_to
操作的选项,然后在scoped_collection
中使用collection_action
。
link_to "DO WORK", do_something_admin_game_stats_path(param.slice(:scope, :filter))
我不确定过滤器是否是正确的param键,但原则应该是相同的。如果由于某种原因您无法在操作链接中访问params
,请尝试controller.params
或者如果您真的绝望controller.send(:params)
。在我的脑海中,我不确定这些参数是否可以在我头顶的视野中公开获得。
答案 1 :(得分:0)
您可以使用会话将过滤后的数据传递给 collection_action 本身。
collection_action :do_something do
# call some async process
filtered_data = session[:filtered_data]
redirect_to :action => :index, :notice => "started working!"
end
action_item :only => :index do
session[:filtered_data] = collection.limit(nil)
link_to('DO WORK', do_something_admin_game_stats_path)
end
答案 2 :(得分:0)
第二个选项是在 post
请求中发送这些参数
collection_action :do_something do
resource_class.ransack(params[:q]).result # returns filtered records
redirect_to :action => :index, :notice => "started working!"
end
action_item :only => :index do
button_to 'DO WORK', do_something_admin_game_stats_path, method: :post, params: params.slice(:q)
end