【问题标题】:Route to different action based on format根据格式路由到不同的操作
【发布时间】:2020-01-03 23:19:24
【问题描述】:

我想根据格式路由到不同的控制器操作,即 /phones/1.json 执行不同的操作,/phones/1 执行不同的操作

例如,我希望 GET /phones/1.json 转到 show_json 操作和 GET /phones/1show 操作

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5


    【解决方案1】:

    这就是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 从那里触发任何自定义行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多