【发布时间】:2015-10-30 19:33:39
【问题描述】:
我是 Rails 世界的新手,但是这个双重渲染错误有点有趣。我从未在 PHP 或 ASP.NET 中遇到过这个问题。
所以我在一个控制器中有两个动作,通过 Devise 的 Register 控制器扩展。
我想实现如果用户登录了两个new_with_school 和create_with_school 动作将被redirect_signed_in_user 函数重定向。
class RegistrationsController < Devise::RegistrationsController
def new_with_school
redirect_signed_in_user
build_resource({})
resource.build_school
respond_with self.resource
end
def create_with_school
redirect_signed_in_user
build_resource(sign_up_params_with_school)
resource.school = School.new(sign_up_params_with_school[:school_attributes])
resource.school.user = resource
resource.role = 1
resource.save
respond_to do |format|
if resource.save
format.html { redirect_to after_sign_up_path_for(resource) }
format.json { render :show, status: :created, location: resource }
else
clean_up_passwords resource
set_minimum_password_length
format.html { render :new_with_school }
format.json { render json: resource.errors, status: :unprocessable_entity }
end
end
end
protected
def redirect_signed_in_user
redirect_to '/' if user_signed_in?
end
end
我给出了这个错误信息:
在此操作中多次调用渲染和/或重定向。 请注意,您只能调用渲染或重定向,最多 每个动作一次。另请注意,重定向和渲染都不会终止 动作的执行,所以如果你想在之后退出一个动作 重定向,您需要执行类似“redirect_to(...) 和 返回”。
所以在 Rails 中我似乎只能使用一个重定向功能。
但是在这种情况下,如果用户登录,我该如何实现,登录用户无法访问这两个操作。最漂亮的解决方案是,webapp 可以以某种方式将用户重定向到根路径(不抛出异常),所以我想要最用户友好的解决方案。
我该怎么做? (我已经阅读了设计代码,但我无法弄清楚根重定向是如何工作的)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 redirect devise