我可以在RoR的视图中使用redirect_to吗?

在我的应用程序中,我在每个页面上都有一个小框,检查用户发出的请求的状态。 如果随时接受请求,则应自动将用户带到某个页面。 到目前为止这是我的代码:

   "email@gmail.com") %>   

但是我收到了这个错误:

 undefined method `redirect_to' for # 

是否无法在视图中使用redirect_to? 如果没有,我还能用其他东西吗? 谢谢阅读。

redirect_to是ActionController :: Base Class的一种方法,因此您无法在ActionView中使用它。

你可以尝试以下

 <% if w.accepted == true %>  <% end %> 

编辑了email参数

 window.location.href="/logins/sign_up?email=<%= w.email %>" 

对不起,我不知道ruby中是否有任何东西。

如果要从视图中使用redirect_to,请执行以下方法:

语法: <%controller.redirect_to path%>

示例: <%controller.redirect_to users_profile_path%>

视图中的代码可以移动到控制器中,这将使redirect_to可用。

 class ApplicationController < ActionController::Base before_action :check_for_accepted_offer def check_for_accepted_offer if Offer.any? { |o| o.accepted } redirect_to offer_path(:email => "email@gmail.com") end end end 

如果OP想要在接受商品时立即更改URL,则答案中显示的Ruby代码都不会有帮助,因为它仅在页面加载时进行评估。 OP需要设置某种轮询或推送策略,以便在接受要约时提醒浏览器,然后使用另一个答案中发布的JavaScript重定向方案:

 window.location.href="/logins/sign_up?email=<%= w.email %>" 

虽然,这不回答这个问题:“我如何在视图中使用redirect_to”,我认为这个答案最终会对OP更有用。 当我应该在控制器中执行重定向时,我偶然发现有人使用此答案重定向到另一个页面。

redirect_to不是ActionView的方法。 它是ActionController一种方法。 您可以在页面加载或其他一些事件上使用Javascript window.location.href将您的用户带到另一个页面。

是的,您可以从视图中调用controller.redirect_to来获得您想要的内容,而无需呈现整个响应,然后在客户端上使用javascript来发出新请求。

在您的示例中,这将看起来像:

 <% offersMade.each do |w| %> <% if w.accepted == true %> <% controller.redirect_to offer_path(:email => "email@gmail.com") %> <% end %> <% end %> 

请注意,此controller.redirect_to不会中断您的循环,因此您可能希望break ,并且您可能希望确保只有在未重定向时才会有条件地呈现视图的其余部分。

(免责声明:我不一定宽恕这种技术。你可以在你的控制器或助手中做得更好,正如其他人所提到的那样。)