表达式在 irb 和 rails 中的解释不同吗?

Is an expression interpreted differently in irb and rails?

我刚注意到

User.where("id = '309'")

适用于 IRB 控制台。但是它在我的控制器中不起作用。我想知道为什么?

相比之下,User.find(309) 在 irb 控制台和我的控制器中都有效。

在我的控制器中,

before_action :correct_user,   only: [:edit, :update], 

private  
  def correct_user  
      @user = User.where("id = '309'")  
      redirect_to(root_url) unless current_user?(@user)  
 end  
end  

这行不通。查看网页未打开且没有错误消息。

如果用User.find(309)代替。它会通过正确查看网页来工作。

看来您可能希望 User.findUser.where 有相同的行为。 User.find 会自动抓取一个实际的用户,而 User.where 会抓取一个类似于数组的搜索查询。尝试将 .last 放在 where 之后。像这样:

@user = User.where("id = '309'").last