【问题标题】:How to redirect to Not Found page if an invalid URL is passed on Active Admin?如果在 Active Admin 上传递了无效的 URL,如何重定向到 Not Found 页面?
【发布时间】:2021-06-10 11:00:01
【问题描述】:

我在我的 Rails 应用程序中使用 ActiveAdmin gem。我在 ActiveAdmin 中有一个项目资源。我已允许除 new 之外的所有操作。

actions :all, except: [:new]

但在 URL 中,如果明确传递 /admin/items/new,它会抛出 ActiveRecord::Not Found 错误,因为它将 new 作为 id。在错误的描述中,它显示“找不到带有 'id'=new 的项目。如果传递了无效的 url,我想重定向到 404 或未找到页面。有人可以帮我解决这个问题吗? 谢谢提前!

【问题讨论】:

  • 您为什么将其标记为ruby-on-rails-3ruby-on-rails-4ruby-on-rails-5?在这种情况下,它可能不会对答案产生影响,但是您实际使用的是哪个版本?避免添加不相关/误导性的标签。
  • 是的,不应该那样做。我正在使用 ruby​​-on-rails-4。

标签: ruby redirect ruby-on-rails-4 admin activeadmin


【解决方案1】:

您可以像这样从活动管理员打开 BaseController。你可以把它放在一个初始化器中,比如:config/initializer/active_admin_overrides.rb

module ActiveAdmin
  class BaseController
    rescue_from ActiveRecord::RecordNotFound, :with => :resource_not_found
    def resource_not_found
      render :file => "#{Rails.root}/public/404.html", :status => 404
    end
  end
end

【讨论】:

    【解决方案2】:

    你也可以这样做:

    def render_404
        respond_to do |format|
          format.html { render file: Rails.root.join('public', '404'), layout: false, status: 404 }
          format.json { render json: {}, status: 404 }
        end
      end
    

    你也可以在任何你想返回 404 状态的方法上这样返回。

    render file: Rails.root.join('public', '404'), layout: false, status: 404
    

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多