我是Rails世界的新手,但这个 Double渲染错误有点儿有趣。我从未在PHP或ASP.NET中遇到过这个问题。
所以我在一个控制器中有两个动作,通过Devise的寄存器控制器进行扩展。
我希望实现这一目标如果用户登录了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
功能重定向。
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可以某种方式将用户重定向到根路径(没有抛出异常),所以我想要最友好的用户解决方案。
我该怎么做? (我已经阅读了设计代码,但我无法弄清楚根重定向的工作原理)
答案 0 :(得分:1)
使用此:
def redirect_signed_in_user
redirect_to '/' && return if user_signed_in?
end