获取Rails3以加载不同的视图

时间:2010-11-04 03:34:13

标签: ruby-on-rails-3

我正在开发一个带有Pages控制器的Rails3应用程序和两个页面:pages #main和pages#status。主页面有一个链接,点击后进入状态。用户已有配置文件信息,如果该配置文件信息的一部分不存在,我希望状态重定向到main。我有一个神秘的双重定向,但我无法解决。这是页面控制器:

def main
  @current_user = current_user
end

def status
  @current_user = current_user
  if @current_user.address.blank?
    redirect_to :action => "main" and return
  end
end

只要条件不满足,一切都会顺利运作,但是一旦出现这种情况,我就会收到错误:

  

在此操作中多次调用渲染和/或重定向。请注意,您只能调用渲染或重定向,每次操作最多一次。另请注意,重定向和呈现都不会终止执行操作,因此如果要在重定向后退出操作,则需要执行类似“redirect_to(...)并返回”的操作。

实际上,redirect_to被调用两次(相同的行,根据跟踪;不知道为什么)。我想知道这是否是路线问题。这是routes.rb:

match '/main', :to => 'pages#main'
match '/status', :to => 'pages#status'

任何建议都将不胜感激。

这是开发日志:

Started GET "/status" for 127.0.0.1 at Wed Nov 03 21:28:15 -0700 2010
  Processing by PagesController#status as HTML
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 3) LIMIT 1
Before redirect
Before redirect
Redirected to 
Redirected to 
Completed   in 32ms

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".):
app/controllers/pages_controller.rb:15:in `status'
app/controllers/pages_controller.rb:15:in `status'

试图解决这个问题,我在status方法中添加了两条调试行,希望它能提供一些线索:

  logger.debug "Before redirect"
  redirect_to :action => "main" and return
  logger.debug "After redirect"

因此,在我们进入“重定向到”之前,“在重定向之前”行被击中。然后“重定向到”出现两次没有目标。顺便说一下,这种情况发生在重定向线上有或没有“并返回”。我真的不确定发生了什么。

另外,有趣的是,我在main方法中添加了调试行。它永远不会被触发。

1 个答案:

答案 0 :(得分:0)

Rav,您可以粘贴此请求的开发日志吗?具体来说,/ status的第一个请求是否导致重定向到/ main,或者是否因上述错误而失败?

具体来说,请查看log / development.log以获取最新的请求块。