2016-11-15 44 views
0

我developming使用Rails 4.2看起来像这样的JSON API API端点的REST风格的设计:Rails的干着过滤器

GET api/v1/car => app/controller/api/v1/car_controller#index 
GET api/v1/car/:id/installment => app/controller/api/v1/carresources/installment_controller#index 

现在我想有过滤器扩展这些端点。

api/v1/carresources/installment#index

  • 在特定的时间段
  • 所有分期付款特定汽车的付款方式(现金,手机钱包,< - 移动支付供应商)所有分期付款特定汽车

api/v1/car#index

  • 台全车因地区
  • 所有汽车由经销商通过贷款模式

我实现的方式

  • 所有汽车如下:

    app/controller/api/v1/car_controller.rb

    def index 
        res = [] 
        if params.key?('start_date') and parms.key?('end_date') 
        res = Car.index_period(params['start_date'], params['stop_date'] 
        elsif params.key?('loanstructure') 
        res = Car.index_loan_strucuture(params['loan_strucuture']) 
        .... 
        end 
    end 
    

    这是工作,但不是这样一个很好的解决方案,把这些if - “坟墓”背后完全语义上不同的逻辑。 这将有可能为每个过滤器创建一个新的端点,但我感觉这使得路由和控制器结构变得庞大。

    我也想,如果条款,以避免这些,因为这也是对用户角色怎么回事哪位我跳过显示一些授权 - 这也与if clauses 做是否有另一种聪明的办法,还是应该我花了一每个过滤器的额外路由,然后我需要复制整个授权结构。 非常感谢提前 非常感谢提前

  • 回答

    0

    OP我建议通过处理过滤器类中的request.query.params单独打破过滤代码很少。通过

    1. 允许其正在传递这样你就可以有一个parseFilters功能,做了过滤器的验证

      这个过滤器类中去耦合的代码的帮助。

    2. 您可以使用它指向的哈希表来

    {('start_date','end_date'): "index_period(params['start_date'], params['stop_date']", etc }

    这将帮助你直接从parsefilters应用过滤器。 这将确保您的代码是分离的,并且可以在其他情况下重用。