1

Rails はコントローラー アクションの応答コードをどのように計算しますか?

次のコントローラ アクションがあるとします。

def update
  respond_to do |format|
    if @user.update(user_params)
      format.html { redirect_to @user, notice: 'User was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: 'show' }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

(同じビューを使用してレコードを表示および編集しています)

この肯定的なテストでは:

test "should update basic user information" do
  user = users(:jon)
  user.first_name="Jonas"
  put :update, :id => user.id, :merchant_user =>user.attributes
  assert_response :found
  user = Merchant::User.find(user.id)
  assert user.first_name == "Jonas", "Should update basic user information"
end

否定的なテストは次のようになります。

test "should not update user email for an existing email" do
  user = users(:jon)
  original_user_email = user.email
  existing_user_email = users(:doe)
  user.email=existing_user_email.email
  put :update, :id => user.id, :merchant_user =>user.attributes
  assert_response :success
  user = Merchant::User.find(user.id)
  assert user.email == original_user_email, "Should not update email for an exising one"
end

レコードを正常に更新すると、302 応答コードが返されます。これは、Rails が GET resource/:ID に対してデフォルトで 302 に設定されていると想定しています。レコードの更新に失敗すると、200 OK が発生します。

これらの応答コードはどのように計算され、どのようにオーバーライドできますか?

ありがとう

4

2 に答える 2

1
  1. コントローラーではupdateなく、使用するコードが機能しているとは思えません。パブリックに消費するためのものではない ActiveRecord::Callback のプライベート メソッドです。update_attributesupdate 問題には言及されていませんが、Rails 4updateの置き換えであると指摘する Michael のコメントに感謝します。update_attributes

  2. 応答のテストは不要であり、従来の応答コードを破る必要はさらにありません。代わりに、ActiveRecord への影響と、レスポンスの本文またはパスを確認してください。

于 2013-07-13T10:27:08.773 に答える