Форма обратной связи Rails: Как получить URL для текущей страницы?

Я работаю с плагином обратной связи Дэвида Франциско. Плагин работает отлично, за исключением одного - мне понадобится форма обратной связи для отправки в базу данных URL-адреса страницы, на которой была использована форма обратной связи. Кто-нибудь знает как это сделать?

Представление, которое должно было бы отправить текущий URL, в дополнение к текущей отправленной информации:

<h4>Feedback</h4>
<p>Please leave us feedback, it's really appreciated.</p>

<%= form_for @feedback, :as => :feedback, :url => feedback_index_path, :html => { :id => "feedback_form" } do |f| -%>
  <%= f.hidden_field 'user_id', :value => current_user.id %>
  <% unless @error_message.blank? %>
  <p class="error">
    <%=h @error_message %>
  </p>
  <% end %>
  <p>
    <%= f.label 'subject' %>
    <%= f.select 'subject', ['Problem', 'Suggestion', 'Question', 'Other'] %>
  </p>
  <p>
    <%= f.label 'comment' %><br />
    <%= f.text_area 'comment', :rows => 10, :cols => 30 %>
  </p>
  <p><%= f.submit 'Send' %></p>
<% end -%>

В настоящее время feedback_index_path - это всегда "/ feedback", URL-адрес формы.

Спасибо Александра

3 ответа

Решение

Ты можешь использовать request.referer в вашем контроллере, чтобы получить путь к странице, которая вызвала ваше действие. request.referer возвращает полный URL, но вы можете разобрать его с помощью URI модуль:

URI(request.referer).path

Я вижу, что некоторые люди предложили request.fullpath но это на самом деле путь действия, которое обрабатывает запрос (в вашем случае /feedbacks/new), а не путь, откуда форма была отправлена.

Если request.fullpath не работает неправильно, вы можете быстро взломать, сохраняя URL страницы в атрибутах данных страницы, и при отправке получить текущий URL с помощью jQuery из этих атрибутов. Но это хак, просто чтобы заставить его работать.

Кстати, как вы предоставляете форму обратной связи?

feedback_index_path является вспомогательным методом маршрутов, который всегда возвращает одно и то же. В твоем случае /feedback,

Посмотрите здесь информацию о доступе к текущему URL в Rails 2 и 3.

Другие вопросы по тегам