我如何send
使用方法链的一个方法链的结果?
例如:
class MyController < ApplicationController
def index
@collection = @resource.sub_resources.send(index_scope).paginate(page: params[:page], per_page: 50)
end
private
def index_scope
MyModel.approved.today
end
end
index_scope
返回适当模型的范围链。有没有办法将这些范围链接到我在send(index_scope)
方法中调用index
的位置? send(index_scope)
无效,只是我最近的尝试。
我想到的另一个选项是将范围名称放在一个数组中,然后连续调用每个。这意味着index_scope
更改为:
def index_scope
[:approved, :today]
end
这会将方法更改更改为:
@collection ||= @location
.send(controller_name)
.tap do |o|
index_scope.each { |method| o.send(method) }
end
.paginate(page: params[:page], per_page: per_page)
但我想知道Ruby是否有更好的方法。
答案 0 :(得分:2)
您也可以执行类似
的操作class MyController < ApplicationController
def index
@collection = scoped_for_index(@resource.sub_resources).paginate(page: params[:page], per_page: 50)
end
private
def scoped_for_index(collection)
collection.approved.mine
end
end
答案 1 :(得分:0)
您可以merge
两个范围:
def index
@collection = @resource.sub_resources.merge(index_scope).paginate(...)
end
def index_scope
MyModel.approved.mine
end