我從用戶收到我的網站的報告,他們得到錯誤422當使用POST訪問「結果」頁面時。我不能重新創建這個錯誤,所以我想知道是否有任何在我的代碼下面會導致格式錯誤?我預計可能會出現錯誤,因爲我已將Rails 3.x項目升級到Rails 4.2。我在Rails(可能)中渲染導致422錯誤
我想知道是否有什麼明顯的代碼會產生422錯誤,或者如果有無論如何排除422錯誤。
基本上,在#show中有一個POST方法結果。它會創建一個結果文本並登錄到像/ this-post-name/result?這樣的url?r = abc123。我正在渲染#show in/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
嗯,是的,這是真的,但我真的不明白爲什麼普通用戶最終會出現這個錯誤?爲什麼這個PUT請求的正常提交被解釋爲XML?在我的版本中,我刪除了這一行,但我無法確認這是否解決了422錯誤。 – Christoffer
沒有查看代碼很難說。我會在'format.xml {Rails.logger.error「...#{params.inspect}內部加強日誌記錄和跟蹤所有參數...」} – slowjack2k
實際上,我認爲這個問題與protect_from_forgery和mobiles有關Cookie被禁用。它可能與我有另一個問題有關:http://stackoverflow.com/questions/39055480/invalidauthenticitytoken-errors-in-mobile – Christoffer