Rails表示不在POST上调用create controller方法

时间:2011-02-22 17:55:24

标签: ruby-on-rails form-for

我的/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方法,因为在/ password_resets发生POST时会调用PasswordResetsController :: create()方法。

但是,当我将表单放在另一个视图中时,比如/app/views/test/index.html.erb,请填写表单,提交,我

  

未知行动

     

没有对索引做出回应。操作:   access_forbidden,admin_created?,   check_roles,创建,编辑,find_order,   包括,新,role_requirements,   role_requirements =,title,title =和   更新

为什么移植表单的任何想法都不起作用?

1 个答案:

答案 0 :(得分:0)

原来这个问题与SSL有关。这出现在日志中:

  

过滤链暂停为[:ensure_proper_protocol] rendered_or_redirected。

我在所需的SSL上有表单的页面,Rails不喜欢我将表单从SSL页面提交到非SSL页面。所以,作为一种解决方法,因为我正在使用ssl_requirement,所以我只是把

ssl_required :all

在password_resets控制器中,现在情况正常。