Rails休息呼叫几个动作

时间:2012-12-06 09:31:58

标签: ruby-on-rails api rest

我的项目中有很多资源。现在我想为我的所有资源实现“日期范围”功能。

示例:

/url/posts/daterange/datefrom-dateto/

/url/schedule/daterange/datefrom-dateto/

我可以在每个想要使用它的控制器中写一个动作但是感觉就像在重复自己。

如何实现可以被所有行为使用的全局动作?

路由是最好的方式还是我应该在application_controller

中写一些东西

2 个答案:

答案 0 :(得分:1)

我会使用参数而不是路径段,例如/url/posts?datefrom=2012-12-05&dateto=2012-12-31,因为这不会影响路由并且仍然是RESTful。

然后,我想拥有以下类宏:

class PostsController < ApplicationController
  allows_query_by_daterange
  #...
end

混合:

module QueryByDateRange
  def allows_query_by_daterange
    include QueryByDateRange::Filter
  end

  module Filter
    extend ActiveSupport::Concern
    included do
      before_filter :apply_daterange  # maybe only on the index action?
    end

    def apply_daterange
      # set @datefrom and @dateto from params
    end
  end
end

让所有控制器都可以使用:

class ApplicationController
  extend QueryByDateRange
end

在您的操作中,您现在至少已设置实例变量。这个解决方案可以进一步推动,其中条件会自动附加到您的ARel语句中,并且您需要添加宏。

希望我的回答能告诉你一个可能的方向。

答案 1 :(得分:1)

我猜你只是希望单独使用索引操作。为此,您可以在config / routes.rb

中使用以下内容
match '/(:controller)/(/daterange/(:datefrom)-(:dateto))(.:format)' => ':controller#index', :via => :get

如果您希望将其用于其他操作,则可以在routes.rb

中进行配置