0

私は最初の Rails アプリを作成しており、JQuery を使用して ajax POST リクエストを作成し、リソースを更新しています。私は送信して_method: "PATCH"おり、正しいコントローラーが実行されています:

  def update
    @buddyship = Buddyship.find(params[:id])
    if @buddyship.involve? current_user && @buddyship.update(buddyship_params)
      render json: { success: true }
    else
      render json: { success: false }, :status => 500
    end
  end

私は最初に標準的な使用例をテストしています。この関係には現在のユーザーが含まれているため、条件の最初の部分は と評価されtrueます。2番目もそうです、試したので知っています

def update
  @buddyship = Buddyship.find(params[:id])
  bool = @buddyship.update(buddyship_params)
  logger.debug "bool: "+bool.to_s
  if @buddyship.involve? current_user && bool
    render json: { success: true }
  else
    render json: { success: false }, :status => 500
  end
end

そして私が得たログでbool: true。さらに、レコードはデータベースで更新されます。それでもどういうわけか、成功ではなく内部サーバーエラーが発生します。

andの代わりに単純に使用すると&&、すべてが期待どおりに機能します。

if @buddyship.involve? current_user && @buddyship.update(buddyship_params)

andは よりも優先順位が低く&&、代入演算子はその中間にあることを理解してい=ます。しかし、このコンテキストでは、これは関係がないように思われます。結局のところ、オペレーターは 1 つしかありません! したがって、他のものと優先順位を競うことはありません。それはかなり簡単に思えます。何が間違っているのですか?

4

2 に答える 2