- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天,当我尝试为用户 Controller 使用一些辅助方法时,出现了此错误:
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".)
application_controller.rb
中:
class ApplicationController < ActionController::Base
def current_user
User.find_by :id=>session[:user_id]
end
def log_in?
!!session[:user_id]
end
def log_in_first
if !log_in?
session[:error]="You have to log in first to continue your operation"
redirect_to("/login") and return
end
end
def correct_user?
if !(current_user.id.to_s==params[:id])
session[:error]="You have no right to do this operation."
redirect_to "/"
return
end
end
end
user_controller.rb
:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id]=@user.id
redirect_to user_path(@user)
else
render 'new'
end
end
def show
log_in_first
@user = User.find_by id: params[:id]
correct_user?
if @user
render 'show'
else
redirect_to '/login'
end
end
private
def user_params
params.require(:user).permit(:name,:password,:email,:email_confirmation)
end
end
return
和
and return
中同时使用
log_in_first
和
correct_user?
来解决此问题,但仍然无法正常工作。有人有什么想法吗?
最佳答案
问题出在show
Action 中,log_in_first
重定向,然后show Action 执行所需的操作,即重定向或渲染。这导致错误。
更好的解决方案是使用before_action
进行身份验证和授权,并仅让用户 Controller 操作执行其任务。如下所示。
class ApplicationController < ActionController::Base
def current_user
User.find_by :id=>session[:user_id]
end
def log_in?
!!session[:user_id]
end
def authenticate_user!
if !log_in?
session[:error]="You have to log in first to continue your operation"
redirect_to("/login")
end
end
def authorize_user!
unless current_user&.id.to_s==params[:id]
session[:error]="You have no right to do this operation."
redirect_to "/"
end
end
end
class UsersController < ApplicationController
before_action :authenticate_user!, only: [:show]
before_action :authorize_user!, only: [:show]
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id]=@user.id
redirect_to user_path(@user)
else
render 'new'
end
end
def show
@user = User.find_by id: params[:id]
render 'show'
end
private
def user_params
params.require(:user).permit(:name,:password,:email,:email_confirmation)
end
end
关于ruby-on-rails - AbstractController::DoubleRenderError cannot be fixed with “redirect_to and return” ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59162480/
我有一个简单的模型和 Controller 。让我们以新西兰人为例: def index @kiwis = Kiwi.all end def destroy kiwi = Kiwi.f
我怀疑这两个命令之间是否存在差异,当我想在 Rails 中创建没有 View 的操作时,我一直使用 redirect_to之后没有任何返回,我从来没有遇到任何问题,但直到我忘记放置 redirect_
我的代码是这样的: def index @monkeys = Monkey.where(owner: current_user) end def new @monkey = Monkey.ne
我有一个 Controller ,可以在特定条件下在特定点重定向。当我将参数传递给我的 Controller 规范(使用最新的 RSpec)中的规范辅助方法以触发这些条件时,我得到一个 ActionV
我的应用程序中有很长的表单,所以我设置了一个 _new_form.html.erb这是在我的 new.html.erb 中呈现的.在用户更新此表单并通过一些基本验证后,我希望它们被重定向到 edit.
代码是什么 redirect_to @user 在 Controller 方法中使用时,是指在 Rails 中吗? 它究竟重定向到哪里?它是重定向到用户 Controller (如果是, Contro
我有一个 Rails 应用程序,它有一个在 iframe 中呈现的表单,从创建操作我想从 iframe 中 redirect_to 并重新呈现整个页面而不是在iframe. 我很好奇有什么想法可以实现
我正在尝试根据提交的表单上的参数重定向到一个位置。 如果 params[:route] = group ,我想重定向到 groups_path。 我尝试了以下方法来重定向,但很明显,groups_pa
def confirm_invite_new_tutor redirect_with_msg = false @game_school = GameSchool.find(params
我在使用 rails 时遇到了一点问题,我希望能够做这样的事情来避免多次重定向: def render_not_found not_found end private def not_foun
我是菜鸟 redirect_to users_url, notice: 'Succeed.' 然后我添加了一条消息,但它失败了: redirect_to users_url, notice: 'Su
我的付款表单中有一个隐藏的输入,如下所示: "> " /> 支付后我会这样使用它: header("location: " . $_GET['redirect_to']); 一切正
我正在学习 Rails 并且遇到了 Rspec 的问题。我对 Controller 进行了以下测试: describe PostsController, "creating a new post" d
我试图在资源创建后显示它。 路线.rb resources :eco_systems do member do get 'new' post 'create'
我见过的最奇怪的事情。 在 Controller 中,我尝试重定向以将用户发送到另一个网站: redirect_to "http://google.com" --> This works. 但是,如果
Turbolinks 在整个应用程序中运行。我需要在某个场景中在 create 方法中重新加载页面。 这会重定向到正确的页面,但不会重新加载页面: redirect_to convos_path 这会
我已经尝试查看其他答案,但我似乎无法弄清楚为什么我的重定向不起作用。 所以我在 Rails 3.1 中使用 Devise,我正在制作一个购物网站。除非已登录,否则不允许访问者将商品添加到购物车。这就是
在我的 rails 应用程序中,我有一个学生模型和一个 material_student。在学生登录后,我会将其重定向到一个页面,让他可以选择在两个“编辑” View 之间进行选择。第一个由stude
我在 The Rails 3 Way 一书中看到了一个例子,它说 redirect_to post 这是否因为 post 而有什么特殊含义? , 或者如果它只是一个示例和 post 的糟糕选择只是一个
试图弄清楚为什么我的 nil 检查在调用没有参数的方法或不产生记录的参数 ID 时失败。 @game = Game.where(:id => params[:id]).first if @game.n
我是一名优秀的程序员,十分优秀!