Rails:为什么这种形式会触发错误的操作



我的应用程序中有一个表单触发了错误的控制器操作。下面是呈现的表单:

<form id="edit_profile_1" class="simple_form profile windowed" method="post" enctype="multipart/form-data" action="/profiles/1" accept-charset="UTF-8">
  <div style="margin:0;padding:0;display:inline">
  <input type="hidden" value="✓" name="utf8">
  <input type="hidden" value="put" name="_method">
  <input type="hidden" value="..." name="authenticity_token">
  </div>
....
</form>

所以,几乎是一种正常的形式。在我的本地环境中,这工作正常,它会触发profiles#update操作。但是,当由于某种原因部署在 Heroku 上时,这会触发profiles#show操作,因此不起作用。

什么给?以前有没有人遇到过此错误,您知道如何解决它吗?

-编辑- @Laas:这是生产日志:

2011-05-20T21:41:38+00:00 app[web.1]: Started GET "/account" for 98.201.59.6 at 2011-05-20 14:41:38 -0700
2011-05-20T21:41:40+00:00 heroku[router]: GET www.fourthenvironment.org/account dyno=web.1 queue=0 wait=0ms service=2212ms bytes=8672
2011-05-20T21:41:40+00:00 app[web.1]: Connected to NewRelic Service at collector-6.newrelic.com:80
2011-05-20T21:41:40+00:00 heroku[router]: GET www.fourthenvironment.org/javascripts/rails.js dyno=web.1 queue=0 wait=0ms service=2ms bytes=5176
2011-05-20T21:41:41+00:00 heroku[router]: GET www.fourthenvironment.org/javascripts/jquery.144.min.js dyno=web.1 queue=0 wait=0ms service=3ms bytes=78865
2011-05-20T21:41:42+00:00 heroku[router]: GET www.fourthenvironment.org/stylesheets/style.css dyno=web.1 queue=0 wait=0ms service=3ms bytes=63444
2011-05-20T21:41:47+00:00 heroku[router]: GET www.fourthenvironment.org/favicon.ico dyno=web.1 queue=0 wait=0ms service=4ms bytes=1672
2011-05-20T21:41:50+00:00 app[web.1]: 
2011-05-20T21:41:50+00:00 app[web.1]: 
2011-05-20T21:41:50+00:00 app[web.1]: Started POST "/profiles/1" for 98.201.59.6 at 2011-05-20 14:41:50 -0700
2011-05-20T21:41:50+00:00 heroku[router]: POST www.fourthenvironment.org/profiles/1 dyno=web.1 queue=0 wait=0ms service=102ms bytes=420
2011-05-20T21:41:50+00:00 app[web.1]: THIS SHOULD NOT BE TRIGGERED
2011-05-20T21:41:50+00:00 heroku[router]: GET www.fourthenvironment.org/profiles/1 dyno=web.1 queue=0 wait=0ms service=30ms bytes=414
2011-05-20T21:41:50+00:00 app[web.1]: 
2011-05-20T21:41:50+00:00 app[web.1]: 
2011-05-20T21:41:50+00:00 app[web.1]: Started GET "/account" for 98.201.59.6 at 2011-05-20 14:41:50 -0700

请注意"不应触发此"。下面是控制器:

class ProfilesController < ApplicationController
    before_filter :authenticate_user!
    def show
        puts "THIS SHOULD NOT BE TRIGGERED"
        redirect_to account_path
    end

    def edit
        @profile = Profile.find(params[:id])
    end
    def update
        puts "profiles#update"
        @profile = Profile.find(params[:id])
        if @profile.update_attributes(params[:profile])
            redirect_to account_path, :notice => t('user.notice.updated')
        else
            render :action => 'edit'
        end
    end
end

事实证明,该问题与SSL要求Gem的使用有关。出于某种原因,如果您在使用 SSL 要求时将请求从 SSL 页面发送到非 SSL 页面,它会被重定向。因此,要修复,请在请求的两端启用SSL要求,它将起作用。看起来从 SSL 到非 SSL gem 只允许获取 - 因此出现了错误。这在 Rails 3.1 中看起来无关紧要,因为将内置新的 SSL 要求功能,并且不需要 gem。

非常感谢Heroku工作人员帮助隔离它。

似乎

与这个问题相同 路由问题-多部分形式-on-heroku。

由于它只有几天的历史,也许这不是巧合,Heroku有什么不对劲的地方?

为什么表单标签是硬编码的?使用form_tag帮助程序

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

相关内容

  • 没有找到相关文章

最新更新