我收到用户向我的网站报告,他们在使用 POST 访问“结果”页面时收到错误 422 。我根本无法重新创建此错误,所以我想知道下面的代码中是否有任何内容会导致格式错误?我预计这里可能会出现错误,因为我已将 Rails 3.x 项目升级到 Rails 4.2。
我想知道代码中是否有任何明显的东西会产生 422 错误,或者是否有任何解决 422 错误的方法。
基本上,在#show 中有一个 POST 方法来产生结果。它正在创建一个结果文本并落在 /this-post-name/result?r=abc123 之类的 url 上。我在/result 中渲染#show,因为它基本上再次加载相同的页面,但带有“结果框”。我认为必须使用 /result 是我作为新手程序员所做的选择,并不是绝对必要的。
我很确定错误存在于“respond_to”中,但无法弄清楚,或对其进行故障排除(即重新创建它)。
另外,我不确定这是否重要,但我在此页面上收到大量 AuthencityToken 错误。
编辑:我设法通过我的 iPhone 访问它并发布一个表单来重新创建这个问题,然后我禁用了 cookie 并再次发送表单。这不会是人们经常做的事情,但我猜禁用 cookie 可能会导致这种情况?
def show
@avaliable_posts = Post.where(:available => true)
end
def result
if request.get? && params[:r].blank? # Just visiting /result withoutout POST or ?r url
redirect_to category_path(@category)
else
set_round(session[:round_by_number])
# Either the visitor just posted the result or is revisiting through URL
if !params[:r].blank? # Visitor arrived from URL
@result = Result.find_by_scrambled_identifier(params[:r])
params_to_use = @result.params_used
@params_to_use = @result.params_used
else
params_to_use = params
@params_to_use = params_to_use
end
post_instance = @post.get_post_instance(params_to_use)
if post_instance.valid?
@post_result_array = post_instance.calculate_me(params_to_use)
@post_result_text_array = @post_result_array[0]
respond_to do |format|
format.html { render :action => "show" }
format.json { render :json => @post }
end
else # post not valid
@errors = post_instance.errors
respond_to do |format|
format.html { render :action => "show" }
format.xml { render :xml => @validator.errors, :status => :unprocessable_entity }
format.json { render :json => @post }
end
end
end
end