【发布时间】:2020-01-03 23:19:24
【问题描述】:
我想根据格式路由到不同的控制器操作,即 /phones/1.json 执行不同的操作,/phones/1 执行不同的操作
例如,我希望 GET /phones/1.json 转到 show_json 操作和 GET /phones/1 到 show 操作
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-5
我想根据格式路由到不同的控制器操作,即 /phones/1.json 执行不同的操作,/phones/1 执行不同的操作
例如,我希望 GET /phones/1.json 转到 show_json 操作和 GET /phones/1 到 show 操作
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-5
这就是respond_to 的用途:
respond_to do |format|
format.json { show_json }
format.html
end
如果你明确想要不同的动作,这违反了 Rails 约定,那么你需要添加route constraints:
get 'phones/:id.:format', constraints: { format: 'json' }, to: '...#show_json'
get 'phones/:id', to: '...#show'
这确实打破了 Rails 模型,即每个 REST 操作都有一个单一的控制器操作,所以我建议不要这样做。
您应该拥有一个resources :phones 路由,它会为您处理所有默认设置。您可以使用respond_to 从那里触发任何自定义行为。
【讨论】: