From: "charliesome (Charlie Somerville)" Date: 2013-11-05T09:56:09+09:00 Subject: [ruby-core:58164] [ruby-trunk - Bug #9081][Rejected] Unexpected result for and opreator Issue #9081 has been updated by charliesome (Charlie Somerville). Status changed from Open to Rejected Priority changed from High to Normal This isn't a bug. The 'and' operator has lower precedence than '&&', so when you write this code: puts true and false It's parsed as: puts(true) && false If you instead write: puts true && false Then Ruby will parse this expression like this, as you intend: puts(true && false) ---------------------------------------- Bug #9081: Unexpected result for and opreator https://bugs.ruby-lang.org/issues/9081#change-42749 Author: aminhotob (Mo Amin) Status: Rejected Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN I use this code to test and confirm this result def show @profile = ....... puts "==================" puts user_signed_in? puts current_user.id puts @profile.user.id puts user_signed_in? and (current_user.id == @profile.user.id) puts true and (1 == 2) puts true and false puts true && false puts "==================" ....... end this is console output ================== User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 ORDER BY `users`.`id` ASC LIMIT 1 true 3 User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 11 ORDER BY `users`.`id` ASC LIMIT 1 11 true true true false ================== the last two lines will clear the problem, I except and, && is the same ! ruby -v ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2] rails -v Rails 4.0.0 -- http://bugs.ruby-lang.org/