我的路线中有这个:
scope module: :API,as: :API do constraints format: :Json do resources :users endendconstraints format: :HTML do resources :usersend
当url运行后缀时,这很有用:/users.Json通过我的API ::UsersControlleràlaAPI_users_path; /users.HTML通过我的UsersControlleràlausers_path.
但是,当url中没有后缀时,这不会按预期运行.将约束实现为lambda会显示出错:
#=> visiting /usersscope module: :API,as: :API do constraints ->(request){ puts "In API: #{request.format}"; request.format == :Json } do resources :users endendconstraints ->(request){ puts "In HTML: #{request.format}"; request.format == :HTML } do resources :usersend#=> In API: text/HTML#=> (request.format == :Json) => false
然而它最终在API控制器中.
如果没有任何约束匹配,则不会使用自定义约束类或lambdas或任何东西来阻止rails选择定义的第一个路由.
我无法找到一种方法来编写一个在url缺少后缀时捕获的约束,并且我觉得我不应该 – request.format ==:当我导航到/ users时HTML报告为true .为什么第二个约束没有抓住那个?
此外,虽然我可以通过改变这两个的顺序来“修复”这个,但我更愿意知道为什么我的约束不能正常工作.
有没有人知道如何以不同方式强制执行这些约束以有效地打开任何格式,不仅仅是url后缀,还是有一个不包含格式后缀的显式约束?
解决方法 我认为你不需要第二个约束块(一个用于:HTML).我认为这应该做你想要的:scope module: :API,as: :API do constraints format: :Json do resources :users endendresources :users总结
以上是内存溢出为你收集整理的ruby-on-rails – Rails路由:指定none时的格式约束全部内容,希望文章能够帮你解决ruby-on-rails – Rails路由:指定none时的格式约束所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)