ruby 404页面不存在,我该如何返回首页?

plicqrtu  于 2023-01-12  发布在  Ruby
关注(0)|答案(5)|浏览(168)

例如,我有一个模型(用户模型)。当用户注册一个帐户时,会发送一封电子邮件提醒用户他/她的帐户已被激活。在这种情况下,如果管理员删除用户记录,然后用户单击电子邮件中的链接查看他/她的配置文件,它会显示错误。所以,我想检查用户记录是否存在。如果不存在,404错误页面404错误页面
我已经尝试了下面的代码,但它不工作。this is the following example that i have tried

def show
  @user = User.find(params[:id]) or raise ActionController::RoutingError.new('Not Found')
end

那么,有没有解决办法呢?
谢谢。

mtb9vblg

mtb9vblg1#

这很简单,你只需要render轨道默认404页面或您自定义的一个。
在应用程序控制器中,

class ApplicationController < ActionController::Base
 # rest of your application controller code

 def content_not_found
   render file: "#{Rails.root}/public/404.html", layout: true, status: :not_found
 end
end

然后,从任何控制器调用它,你的情况下,

def show
  if (@user = User.find_by_id(params[:id]).present?
    # do your stuff
  else
    content_not_found
  end
end

我不喜欢例外,我尽量避免它们;)

t9aqgxwy

t9aqgxwy2#

请尝试以下代码:

def show
  @user = User.find_by(id: params[:id])

  raise ActionController::RoutingError.new('Not Found') if @user.blank?
end
ebdffaop

ebdffaop3#

试试这个:

def show
  if (@user = User.find_by_id(params[:id])).present?
    @user = User.find(params[:id])
    authorize @user
  else
    raise ActionController::RoutingError.new('Not Found')
  end
end
7kqas0il

7kqas0il4#

如果您希望在应用程序级别...
在应用程序控制器中,添加以下内容...

rescue_from ActionController::RoutingError, :with => :render_404

def render_404
  render :file => "#{Rails.root}/public/404.html",  :status => 404
end

在用户控制器中,您只需说:

def show
  @user = User.find(params[:id])
end

如果您只想在单个控制器级别执行此操作,
在用户控制器中,执行以下操作

def show
  @user = User.find(params[:id])
rescue ActionController::RoutingError
  raise ActionController::RoutingError.new('Not Found')
end
btqmn9zl

btqmn9zl5#

您还可以利用

导轨3及以上

render :file => "#{Rails.root}/public/404.html",  :status => 404

如果您想使用应用程序控制器,那么您可以尝试在应用程序控制器文件中写入以下两点:
1)创建渲染_404操作:

def render_404
    respond_to do |format|
      format.html { render file: "#{Rails.root}/public/404.html", status: 404 }
    end
  end

2)rescue_from ActiveRecord::RecordNotFound, :with => :render_404 action
当你使用“显示”动作时

def show
  @user = User.find_by(id: params[:id])
end

如果未找到记录(未找到参数为[:id]的用户),则会自动出现404。

相关问题