0

POST を使用して「結果」ページにアクセスすると、エラー 422が発生するというレポートを Web サイトのユーザーから受け取りました。このエラーをまったく再現できないので、以下のコードに書式設定でこのエラーの原因となるものがあるかどうか疑問に思っていますか? 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
4

2 に答える 2

1

422 は、処理不能エンティティを意味します。サンプル コード内で、次の HTTP ステータス コードを含む場所は 1 か所だけです。

 format.xml  { render :xml => @validator.errors, :status => :unprocessable_entity }

これは明らかに、フォーマットが XML で@validatorエラーが含まれている場合に発生します。

編集:

ログ内の例外に関する新しい情報と、リンクされた 2 番目のスタックオーバーフローの質問により、Rails の既知の問題に関連しているようです。

于 2016-08-20T10:15:34.853 に答える
0

この問題は、私が別の質問を書いた別の問題に関連しているようです。http://api.rubyonrails.org/v2.3/classes/ActionController/RequestForgeryProtection/から理解できる限り、Web サイトに InvalidAuthencityToken の問題があり、それによって作成された例外によって 422 (500 ではなく) エラーが発生します。ClassMethods.html

これが同じ問題であると 100% 確信しているわけではありませんが、かなり可能性が高いと思われるため、この質問を閉じます。

于 2016-08-20T15:27:22.520 に答える