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. 第二个也是,我知道是因为我试过了

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的优先级低于&&,并且赋值运算符=介于两者之间。但在这种情况下,这似乎无关紧要,毕竟只有一个操作员!因此,它不会与其他任何东西争夺优先权。这似乎很简单。我怎么了???

4

2 回答 2

5

&&具有强优先级和and低优先级。

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

是相同的

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

@buddyship.involve? current_user and @buddyship.update(buddyship_params)

是相同的

@buddyship.involve?(current_user) and @buddyship.update(buddyship_params)
于 2013-08-06T17:04:50.283 回答
0

使用大括号将它们包裹起来,因为空格可能会破坏逻辑。

改变这个

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

if (@buddyship.involve? current_user) && (@buddyship.update buddyship_params)
于 2013-08-06T17:05:05.110 回答