Rails:操作中的双重渲染错误

时间:2015-10-30 19:33:39

标签: ruby-on-rails ruby-on-rails-4 redirect devise

我是Rails世界的新手,但这个 Double渲染错误有点儿有趣。我从未在PHP或ASP.NET中遇到过这个问题。

所以我在一个控制器中有两个动作,通过Devise的寄存器控制器进行扩展。 我希望实现这一目标如果用户登录了new_with_schoolcreate_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 功能重定向。

SELECT CONCAT('DROP ', table_schema, '.', table_name, ';') statement
FROM   information_schema.tables 
WHERE  table_schema = 'db_name_goes_here'
AND    table_name LIKE 'table_base_name_here_%';

我提供了此错误消息:

  

在此操作中多次调用渲染和/或重定向。   请注意,您最多只能调用渲染或重定向   每次行动一次。另请注意,重定向和渲染都不会终止   执行动作,所以如果你想在之后退出动作   重定向,你需要做类似&#34; redirect_to(...)和   返回&#34;

所以在Rails中我似乎只能使用一个重定向函数。

但是在这种情况下,如果用户登录,我怎样才能实现这一点,登录用户无法访问这两个操作。最漂亮的解决方案是,webapp可以某种方式将用户重定向到根路径(没有抛出异常),所以我想要最友好的用户解决方案。

我该怎么做? (我已经阅读了设计代码,但我无法弄清楚根重定向的工作原理)

1 个答案:

答案 0 :(得分:1)

使用此:

def redirect_signed_in_user
      redirect_to '/' && return if user_signed_in?
end