加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails路由:指定none时的格式约束

发布时间:2020-12-17 03:16:49 所属栏目:百科 来源:网络整理
导读:对于Reasons?,我想让一个控制器处理html请求,另一个处理json api请求. 我的路线中有这个: scope module: :api,as: :api do constraints format: :json do resources :users endendconstraints format: :html do resources :usersend 当url运行后缀时,这很有
对于Reasons?,我想让一个控制器处理html请求,另一个处理json api请求.

我的路线中有这个:

scope module: :api,as: :api do
  constraints format: :json do
    resources :users
  end
end
constraints format: :html do
  resources :users
end

当url运行后缀时,这很有用:/users.json通过我的Api ::UsersControlleràlaapi_users_path; /users.html通过我的UsersControlleràlausers_path.

但是,当url中没有后缀时,这不会按预期运行.将约束实现为lambda会显示出错:

#=> visiting /users

scope module: :api,as: :api do
  constraints ->(request){ puts "In api: #{request.format}"; request.format == :json } do
    resources :users
  end
end
constraints ->(request){ puts "In html: #{request.format}"; request.format == :html } do
  resources :users
end

#=> 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
  end
end

resources :users

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读