2015-09-05 2 views
1

Новое для рельсов (программирование в целом), и я немного запутался в маршрутизации.Как предотвратить перенаправление после отправки данных через форму

У меня есть форма, на мой взгляд, которая берет чью-то электронную почту, а затем отправляет ее по электронной почте, как только они попадают в submit. Он работает, но после того, как я нажал submit, я перенаправляюсь в представление метода, который я вызываю, чтобы отправить форму. Я не хочу, чтобы меня перенаправляли, я хочу остаться на одной странице. Я попытался использовать POST и PUT, но оба перенаправляют меня. Я неправильно использую свой контроллер?

Мой контроллер имеет этот метод:

def mail 
    recipient_email = params[:email] 
    itinerary_body = params[:body] 
    x = ItineraryMailer.itinerary("#{recipient_email}", "#{itinerary_body}") 
    x.deliver 
    end 

А вот форма с моей точки зрения:

<%= form_tag({controller: "bookings", action: "mail"}, method: "post") do %> 
    <%= text_field_tag(:email) %> 
    <%= text_field_tag(:body) %> 
    <%= submit_tag("Email Me!") %> 

Мой маршрут:

match '/bookings', to: 'bookings#mail', via: 'post' 

Спасибо!

+0

Вы должны иметь возможность вызвать «render» action'' в конце действия вашей почты, чтобы отобразить любой вид, который вам нравится. Дополнительную информацию см. В разделе 2.2.2 в этом [Руководстве по Rails] (http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action). –

ответ

2

Поскольку у вас нет redirect_to в вашем mail action Rails не перенаправляет вас нигде. Вместо этого он просто пытается отобразить представление этого действия напрямую. Тем не менее, я предполагаю, что это не представление, которое вы хотите визуализировать.

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

redirect_to action: :original_action_name 

Где :original_action_name это имя действия, которое дало вам представление, которое вы хотите.

Вы также можете использовать предложенный в комментарии render 'action', но это может вызвать проблемы в некоторых случаях, когда текущее действие может не загрузиться или настроить все необходимое для представления, которое вы хотите визуализировать. Конечно, вы могли бы просто выполнить эту загрузку/настройку в текущем действии, но тогда вы делаете то же самое в двух местах, которые не являются СУХОЙ.

+0

Возможно, я был неясно в своем посте. У меня есть поле поиска на моей домашней странице. Пользователь при поиске берется на страницу результатов. Затем пользователь может выбрать определенные результаты и отправить их по электронной почте. Итак, пока вы находитесь на странице результатов поиска, вы можете успешно отправить электронное письмо с выбранными данными, но затем вы перенаправлены на представление, которого не существует. Я хочу остаться на странице результатов поиска. На самом деле, стоит потратить деньги на предварительный поиск, поэтому любое перенаправление приведет к повторному поиску. Я просто хочу послать эамиль и ничего другого. – RossRobertMcKee

+0

@RossRobertMcKee Я понял проблему, но я пытался указать правильную терминологию, и, я думаю, я был не очень ясен об этом. Когда действие вызывается в рельсах, например, действие поиска, вы не говорите, что вы получаете «перенаправленные» к результатам поиска, вы просто говорите, что вас показали или отобрали в результатах поиска. То же самое относится к почтовому действию: вы не перенаправляетесь на почтовый ящик, он просто отображается и отображается вам. Поскольку почтовый ящик по умолчанию не тот, который вам нужен, вам нужно перенаправить его, чтобы получить тот, который вам нужен. Терминология противоположна тому, как вы ее используете. – neuronaut

+0

О, ничего себе. Я явно не смотрел на это так, но это имеет смысл. Спасибо. – RossRobertMcKee

 Смежные вопросы

  • Нет связанных вопросов^_^