Могу ли я использовать redirect_to в представлении в RoR? - PullRequest
19 голосов
/ 03 июля 2010

В моем приложении на каждой странице появляется небольшое окно, проверяющее состояние запросов, сделанных пользователем.Если запрос принят в любое время, то пользователь должен автоматически перейти на определенную страницу.Пока это мой код:

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

Но я получаю эту ошибку:

undefined method `redirect_to' for #<ActionView::Base:0x1042a9770>

Не возможно ли пользователю redirect_to в представлении?Если нет, могу ли я использовать что-то еще?Спасибо за чтение.

Ответы [ 5 ]

31 голосов
/ 03 июля 2010

redirect_to - это метод ActionController :: Base Class, поэтому вы не можете использовать его в ActionView.

Вы можете попробовать следующие действия:

<% if w.accepted == true  %>
  <script type="text/javascript">
    window.location.href="/logins/sign_up"  // put your correct path in a string here
  </script>
<% end %>

Отредактировано дляпараметр электронной почты

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

Извините, я не знаю, есть ли что-нибудь в ruby ​​для этого.

19 голосов
/ 18 июня 2015

Если вы хотите использовать redirect_to из представления, выполните этот метод:

синтаксис: <% controller.redirect_to path%>

Пример: <% controller.redirect_to users_profile_path%>

6 голосов
/ 09 марта 2014

Код в представлении можно было бы переместить в контроллер, что сделало бы доступным 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 не показывалсяв ответах поможет, потому что он оценивается только при загрузке страницы.ОП должен будет установить какую-либо стратегию опроса или push-уведомления, чтобы предупредить браузер о принятии предложения, а затем использовать схему перенаправления JavaScript, опубликованную в другом ответе:

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

Хотя это не отвечаетНа вопрос: «Как я могу использовать redirect_to в представлении», я думаю, что этот ответ в конечном итоге был бы более полезным для OP.Я наткнулся на кого-то, кто использовал этот ответ для перенаправления на другую страницу, когда перенаправление должно было быть выполнено в контроллере.

1 голос
/ 03 июля 2010

redirect_to не является методом ActionView. Это метод ActionController. Вы можете использовать Javascript window.location.href при загрузке страницы или другое событие, чтобы перевести пользователя на другую страницу.

0 голосов
/ 07 февраля 2015

Да, вы можете позвонить 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, и вы, вероятно, захотите убедиться, что остальная часть вашего представления будет отображаться только условно, если вы не сделали ' т редирект.

(Отказ от ответственности: я не обязательно оправдываю эту технику. Вам было бы лучше сделать это в вашем контроллере или помощнике, как уже упоминали другие.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...