【问题标题】:How to correctly define the get and post routes in rails?如何正确定义 Rails 中的 get 和 post 路由?
【发布时间】:2018-10-17 04:33:38
【问题描述】:

最近我一直在使用 Rails。我有一个带有 form_tag 的表单,它接收来自 routes.rb 的帮助帖子。我在 get 中有相同的路由来访问这个表单,并且我在 posrt 中有路由能够发送前一个表单的数据:

get 'students/:student_id/monitorings/inscribir', to: 'monitorings#inscribir', as: :inscribir_student_monitoring
post 'students/:student_id/monitorings/inscribir', to: 'monitorings#inscribir', as: :inscribir_student_monitoring_post

我的问题是,我怎样才能分开这些路线?因为,根据调查,这可能会导致问题,因为两者都具有相同的地址,而且如果它确实给我带来了问题,因为当输入此链接时,表单会自动执行。

您是否必须将两条路线分开?如果这是真的,我该怎么做? 我尝试了类似于 rails 对 get new 和 post create 方法所做的事情,但适应了我的情况,但它对我不起作用。

谢谢。

【问题讨论】:

    标签: ruby-on-rails post get routing ruby-on-rails-5


    【解决方案1】:

    你一定要分开两条路线吗?

    不!除非您的两条路线具有相同的名称,否则不会有问题。例如,如果您有如下路线

    get 'students/:student_id/monitorings/inscribir', to: 'monitorings#inscribir', as: :inscribir_student_monitoring
    post 'students/:student_id/monitorings/inscribir', to: 'monitorings#inscribir', as: :inscribir_student_monitoring
    

    那么 Rails 会像这样抛出异常

    ArgumentError:无效的路由名称,已在使用中: 'inscribir_student_monitoring' 你可能已经定义了两条路线 使用 :as 选项的相同名称,或者您可能正在覆盖路由 已由具有相同命名的资源定义。对于后者, 您可以按照说明限制使用 resources 创建的路由 这里: http://guides.rubyonrails.org/routing.html#restricting-the-routes-created

    由于您的路线有一个不同的名称,因此不必担心。虽然你可以使用match来缩短你的代码

    match 'students/:student_id/monitorings/inscribir', to: 'monitorings#inscribir', via: [:get, :post]
    

    【讨论】:

    • 您好,感谢您的回答。如果我遇到问题,尤其是在指定路径中的表单,当输入该表单时,表单会被执行并显示空字段的错误。这个表单通过post方法,进入表单页面是通过get方法。
    • @ElPapu 我没有看到任何问题。 GET 路由将用于呈现表单页面,POST 路由将用于提交表单
    • 我明白了,我想到的另一件事是将路由 POST 放在控制器的另一个函数中,这样我可以将渲染的作用与逻辑的逻辑分开形式,如下所示:to: 'monitorings # newMethod'
    • @Pavan 匹配在 rails5 中已弃用,是否可以替代 via?
    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多