我正在使用Rails 4.2开发JSON API,如下所示:
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
- “graves”背后放置完全语义不同的逻辑。
可以为每个过滤器创建一个新的端点,但我觉得这会使路由和控制器结构膨胀。
我还想避免使用这些if子句,因为这些也是对用户角色的一些授权 - 我跳过显示 - 这也是用if clauses
完成的
还有另一种聪明的方法,或者我应该为每个过滤器花费额外的路径,然后我需要复制整个授权结构。
提前谢谢了
非常感谢提前
答案 0 :(得分:0)
OP我建议通过在过滤器类中处理request.query.params来单独破坏过滤代码。
此过滤器类有助于通过
解耦代码允许验证正在传递的过滤器,这样您就可以拥有in LibGit2Sharp.Core.NativeMethods.git_reference_lookup(git_reference*& reference, git_repository* repo, String name)
in LibGit2Sharp.Core.Proxy.git_reference_lookup(RepositoryHandle repo, String name, Boolean shouldThrowIfNotFound) in c:\projects\libgit2sharp\LibGit2Sharp\Core\Proxy.cs:riga 1932
in LibGit2Sharp.ReferenceCollection.Resolve[T](String name) in c:\projects\libgit2sharp\LibGit2Sharp\ReferenceCollection.cs:riga 441
in LibGit2Sharp.Repository.get_Head() in c:\projects\libgit2sharp\LibGit2Sharp\Repository.cs:riga 268
in GitManager.get_CurrentBranch() in C:\Repository\MyProject\GitRepositoryManagement\GitManager.cs:riga 80
功能。
您可以使用指向
parseFilters
这将帮助您直接从parsefilters应用过滤器。 这将确保您的代码解耦,也可以在其他方案中重用。