From: "gergoerdosi (Gergo Erdosi)" Date: 2013-11-05T09:51:57+09:00 Subject: [ruby-core:58163] [ruby-trunk - Bug #9081] Unexpected result for and opreator Issue #9081 has been updated by gergoerdosi (Gergo Erdosi). This isn't unexpected behavior. (({and})) and (({or})) are not boolean, but control flow operators. Execution stops when an operation returns (({nil})) or (({false})(({).})) Use (({&&})) or (({||})) for the desired behavior. ---------------------------------------- Bug #9081: Unexpected result for and opreator https://bugs.ruby-lang.org/issues/9081#change-42748 Author: aminhotob (Mo Amin) Status: Open Priority: High 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/