def current_user @current_user ||= session[:user_id] && User.find(session[:user_id]) end
短短一行代码,却含有很多逻辑,以前老是搞混,这里总结一下。
这句代码相当于
def current_user if @current_user return @current_user else if session[:user_id] @current_user = User.find(session[:user_id]) else @current_user = nil end return @current_user end end
展开后的代码看起来很恶心,代码意思为:如果@current_user不为空直接返回@current_user。
如果@current_user为空,则根据session中的user_id判断是否登录,如果已经登录则查找出用户信息并返回。如果没有登录则返回空。
这里总结下各符号用法:
and 与 && 为和,区别是and优先级比&&低。
or 与 || 为或,not与!为非,区别均是前者优先级低于后者
&&=, !=, ||=这个比较灵活,以前习惯用Java,可以认为它相当于Java里的+=,-=。
a &&= b即为a = a && b。可见Ruby比Java灵活很多。
Ruby的&&, ||与其它语言有些不同。
&&运算法则为:左边为false或nil时,直接分别返回false或nil,右边将不会运算。
左边不为false或nil时,返回右边的对象。
||运算法则为:左边为false或nil时,返回右边的对象。
左边不为false或nil时,直接返回左边的对象,右边的不会运算。
我整理了几个例子:
puts false && "abc" # => false puts nil && "abc" # => nil puts true && "abc" # => "abc" puts "123" && "abc" # => "abc" puts false || "abc" # => "abc" puts nil || "abc" # => "abc" puts true || "abc" # => true puts "123" || "abc" # => "123"
===============如果你想深入请看下面,不深入就算了===============
其实||=这个运算符里面比较复杂,或者说有点乱。
x ||= y #相当于 x || x=y #而不是 x = x||y #区别在于如果x存在且不为空时不会执行任何操作,直接返回。 #还相当于 if defined? x x || x=y else x = y end
相关推荐
pusher-http-ruby, Pusher | owner=@vivangkumar的ruby 服务器库 推 gem 安装&配置将推送器添加到你的Gemfile,然后运行 bundle installgem 'pusher'或者通过 gem 安装gem install pusher在 http://p
有些公司的服务器是不允许链接外网的,导致下载安装资源比较费劲。这里提供了ruby的两个安装包和redis的安装包。下载会快些
Ruby 版本 提供RubyVersion以简化在程序中检查正确 Ruby 版本的过程。安装 在您的命令行上: $ gem install ruby_version 在Ruby中: require 'ruby_version'用法 # Output RUBY_VERSIONRubyVersion . to_s# Check ...
ruby中文教程,从基础到深入的让你学习ruby
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
Ruby中文文档.CHM 方便ruby or rails学习.
Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...
ruby中英文api 适合于初学者。 希望能给大家带来一些帮助
Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码
Redis安装遇到错误解决方案Error installing redis: redis requires Ruby version >= 2.3.0. 先安装rvm,再把ruby版本提升至2.3.0
Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能
握Ruby, 找到属于自己的快乐编程方式, 做到融会贯通并灵活运用到实际工作中。 本书适合Ruby初学者学习参考, 有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点, 本书也能提供不少帮助。
ruby中文手册 chm 内容挺多的 包含: 1、Ruby用户指南 2、Ruby参考手册 3、RGSS入门教程 4、Programming Ruby的翻译
))~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(( (( )) )) ========= ====== ||\ || ||======== ||========= ====== (( (( / / || || \ || || )) || || )) )) / / || || \ || || )) || |...
内含 12 本 Ruby 语言中英文教程资源,本资源下载后解压缩将得到以下图书: Programming Ruby 2nd.pdf Agile Web Development with Rails 2nd ed.pdf Agile Web Development with Rails.pdf Best.of.Ruby.Quiz.pdf O...
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby
ruby语言的简体中文教程
nb60_trans_old_zh_CN,ruby中文文档中心资料
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程思想,充分享受编程的乐趣,通过《Ruby完全自学手册》进入Ruby开发的殿堂。同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 ...