我的项目中有很多资源。现在我想为我所有的资源实现一个“daterange”函数。Rails休息呼吁几个动作
例如:
/url/posts/daterange/datefrom-dateto/
/url/schedule/daterange/datefrom-dateto/
我可以写在我想用它的每个控制器动作,但感觉就像在重复自己。
您将如何实施可以被所有类似操作使用的全局操作?
是路由的最好方法,或者我应该写在application_controller
我的项目中有很多资源。现在我想为我所有的资源实现一个“daterange”函数。Rails休息呼吁几个动作
例如:
/url/posts/daterange/datefrom-dateto/
/url/schedule/daterange/datefrom-dateto/
我可以写在我想用它的每个控制器动作,但感觉就像在重复自己。
您将如何实施可以被所有类似操作使用的全局操作?
是路由的最好方法,或者我应该写在application_controller
我想你只是期待这个索引行动。为此,您可以使用如果你想为其他行动的config/routes.rb中
match '/(:controller)/(/daterange/(:datefrom)-(:dateto))(.:format)' => ':controller#index', :via => :get
下,你可以在配置在routes.rb中
我会用参数来代替路径段,像/url/posts?datefrom=2012-12-05&dateto=2012-12-31
的东西,因为这会不会影响到路线,仍然是宁静的。
然后,我想有下面的类宏:
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语句中,并且添加宏是你所需要做的。
希望我的回答可以告诉你一个可能的方向去哪里。
是的,我可以看到这是如何工作达到同样的。但是如果可以的话,我想使用路径段。由于Rails在获取单个记录等时使用路径段,因此这将成为前端开发人员使用该API的一种方式。 也许你可以映射全局的东西,听/ controlller#action /:daterange /,然后从application_controller调用模块或什么? – jonasulveseth
谢谢,我会试试看 – jonasulveseth