【问题标题】:(Rails 7) status: What is it/does it do?(Rails 7)状态:它/它做什么?
【发布时间】:2022-08-20 19:23:42
【问题描述】:

升级到 Rails 7,在我有嵌套层次结构的邀请系统上工作 路线:

  resources :invites do 
    resources :guests
  end

邀请模特有:has_many :guests, dependent: :destroy 嘉宾模特有:belongs_to :invite

从 guest_controller.rb 发出特定代码:

  def destroy
    @invite = Invite.find(params[:invite_id])
    @guest = Guest.find(params[:id])
    @guest.destroy

    redirect_to invite_path(@invite)#, status: :see_other
  end

当我不包含status: :see_other 时,Rails 会删除与该邀请关联的客人以及邀请本身。 但如果我包括它。通过仅删除选定的来宾条目,它可以按预期工作。

\'status:\' 究竟是做什么的。目前我还没有找到满意的答案。

  • 你能解释一下:see_other吗?
  • 不,我只是“从互联网上获取它”并且它可以正常工作,我不知道是什么使它工作,为什么在早期的项目(Rails 6)中不需要它,但现在它是。
  • :see_status 在这里解释:railsstatuscodes.com/see_other.html
  • @Michael 可能没有see_other 浏览器发出DELETE 而不是GET 到invite_url,因此它被删除(因为在InvitesController 中有destroy 响应它的方法)。

标签: ruby-on-rails-7


【解决方案1】:

see_other - 303 HTTP 状态码。这是一种将应用程序重定向到另一个URI 的方法。

何时使用see_other 状态?

如果对请求的响应是另一个使用 GET 方法的 URI。

推荐link深入了解!!

【讨论】:

    【解决方案2】:

    destroy 操作从数据库中获取来宾,并在其上调用 destroy

    然后,浏览器重定向到状态码为303 See Other 的邀请路径。在执行另一个 HTTP 动词后,状态 303 使用 GET 方法提供重定向(在您的情况下为 DELETE

    如果您未指定此状态,浏览器将使用 DELETE 方法重定向到新位置。您可能有邀请销毁的路线,这就是邀请被自动销毁的原因

    Rails 7 以这种方式工作,官方 rails guide recommends 指定这种状态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多