我的应用程序中有一个表单触发了错误的控制器操作。下面是呈现的表单:
<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