答案 0 :(得分:0)
使用case语句现在拥有它的方式实际上是我已经看到的最常见的方式,只是做了一些修改:
AsyncTask Docs
这是相当易读的,并且适用于大多数情况。但是,如果要将此逻辑完全移出控制器,则可以使用routing constraint:
def index
case params[:select_action]
when 'one'
one
when 'two'
two
end
end
请注意,尽管这是“选择加入”约束,但所有不匹配的内容都将落入索引操作。
这也是一件很新奇的事情,因此,该项目的新手很容易被此绊倒。但是,这很可能是完成任务的最佳方法。这种方法的好处是使用# you can create a constraint object to perform the match
ParamMatchContraint = Struct.new(:parameter, :expected_value) do
def matches?(request)
request.params[parameter] == expected_value
end
end
Rails.application.routes.draw do
resources :targets do
# a lambda will work as well as a constraint class
root constraints: lambda {|request| request.params[:select_action] == 'one'}, action: :one
root constraints: ParamMatchContraint.new(:select_ation, 'two'), action: :two
end
...
end
和only
的过滤器可以指定您的自定义操作,并且您可以使用默认约定基于操作名称指定视图,而不必手动指定视图文件