Форма Rails не вызывает метод создания контроллера при POST

У меня есть следующая форма в моем представлении /app/views/password_resets/new.html.erb

<% form_tag password_resets_path do %>
  <label><%= t(:email) %>:</label><br />
  <%= text_field_tag "email" %><br />
  <br />
  <%= submit_tag t("reset_password") %>
<% end %>

вместе с контроллером PasswordResetsController, содержащим метод create:

def create
  @user = User.find_by_email(params[:email])
  if @user
    @user.deliver_password_reset_instructions!
    self.notice = t("password_reset_instructions_are_mailed")
    redirect_to root_url
  else
    flash[:error] = t("no_user_found")
    render :action => :new
  end
end

Когда я перехожу к /password_resets/new, заполняю форму и отправляю, метод create вызывается правильно, поскольку метод PasswordResetsController::create() вызывается, когда POST происходит с /password_resets.

Однако, когда я помещаю форму в другое представление, скажем, /app/views/test/index.html.erb, заполняю форму, отправляю, я получаю

Неизвестное действие

Нет ответа на index. Действия: access_forbidden, admin_created?, check_roles, создать, изменить, найти_порядок, включить, создать, role_requirements, role_requirements=, title, title= и обновить

Любые идеи, почему пересадка формы не работает?


person Chad Johnson    schedule 22.02.2011    source источник
comment
Как вы определили свой password_resets_path в своих маршрутах?   -  person christianblais    schedule 22.02.2011
comment
Что говорит журнал вашего сервера, когда вы отправляете форму (из другого представления)?   -  person monocle    schedule 22.02.2011
comment
@christianblais Это просто «/password_resets».   -  person Chad Johnson    schedule 23.02.2011


Ответы (1)


Оказывается, проблема была связана с SSL. Это появилось в журнале:

Цепочка фильтров остановлена ​​как [:ensure_proper_protocol] rendered_or_redirected.

На странице у меня была форма с обязательным SSL, и Rails не понравилось, что я отправил форму со страницы SSL на страницу без SSL. Итак, в качестве обходного пути, поскольку я использую ssl_requirement, я просто поставил

ssl_required :all

в контроллере password_resets, и теперь все работает.

person Chad Johnson    schedule 23.02.2011