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
相关推荐
为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2.tar.gz`、`redis-6.0.9.tar.gz` 和 `rubygems-3.1.5.tgz`。接下来,我们将详细...
pusher-http-ruby, Pusher | owner=@vivangkumar的ruby 服务器库 推 gem 安装&配置将推送器添加到你的Gemfile,然后运行 bundle installgem 'pusher'或者通过 gem 安装gem install pusher在 http://p
在IT行业中,管理和切换Ruby版本是一项常见的任务,特别是在开发环境中,不同的项目可能依赖于不同版本的Ruby。`RVM`(Ruby Version Manager)是解决这一问题的利器,它允许开发者在多个Ruby版本之间轻松切换。本文...
Ruby中的控制结构也相当直观。`if`语句用于条件判断,`for`和`while`循环用于迭代。例如,下面的代码会打印1到5的数字: ```ruby for i in 1..5 puts i end ``` Ruby还是一个面向对象的语言,每个值都是一个对象,...
Ruby 版本 提供RubyVersion以简化在程序中检查正确 Ruby 版本的过程。安装 在您的命令行上: $ gem install ruby_version 在Ruby中: require 'ruby_version'用法 # Output RUBY_VERSIONRubyVersion . to_s# Check ...
在实际开发过程中,为了提高代码的可读性和可维护性,Ruby社区形成了一系列约定俗成的惯用法(idioms),这些惯用法可以帮助开发者更高效地编写Ruby程序。 #### 二、循环控制 **1. 数字范围循环** - **传统写法**: ...
在Ruby的标准库中,`Array`类提供了丰富的实例方法和类方法来处理数组。 ##### 1.1 Class methods **1.1.1 []** 用于创建一个新的数组。例如: ```ruby arr = [1, 2, 3] ``` **1.1.2 new** 创建一个新数组。...
Ruby元编程是编程领域中一个深入且强大的主题,它允许程序员在运行时修改或创建代码,极大地提高了灵活性和代码的动态性。这本书“Ruby元编程第二版”专注于讲解Ruby语言的这一独特特性,旨在帮助开发者更好地理解和...
- **关键字**:Ruby中有多种关键字用于控制流和定义程序结构,例如`if`、`else`、`elsif`、`while`、`for`等。 - **运算符**:包括算术运算符(+、-、*、/)、比较运算符(==、!=、<、>)和逻辑运算符(&&、||、!)...
Ruby Ruby Ruby Ruby Ruby Ruby
Ruby中文文档.CHM 方便ruby or rails学习.
在Ruby中使用QTGui工具包,开发者可以利用Ruby的简洁语法和动态特性,同时享受到QT提供的强大GUI设计能力。通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而...
在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build`来编译和安装Ruby。 `rbenv`是一个用于管理全局或用户级别的Ruby版本的工具,它...
Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...
在Ruby编程语言中,排序算法是数据处理和分析的核心部分,它们用于组织和优化数据结构。本资源"ruby-使用ruby实现的排序算法-sorting.zip"聚焦于如何使用Ruby实现不同的排序算法,这对于Ruby开发者来说是一项重要的...
Ruby中的变量不需要声明类型,它们的类型由赋值决定。变量分为局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)和全局变量(以`$`开头)。 控制流程是编程中的关键部分。Ruby提供了条件语句(如`if`和`...
Map、Reduce和Select是Ruby中用于操作和处理数据的关键概念,它们在数据科学、分析和软件工程领域中扮演着重要角色。 1. **Ruby Map**: Map函数允许我们将一个操作应用到数组或集合中的每一个元素上,然后返回一个...
通过`ruby-4-variables.mp4`和`ruby-5-variables-rules.mp4`,你可以深入理解变量的用法和规则,而`ruby-6-expression.mp4`将帮助你掌握如何在Ruby中构建和使用表达式。这些视频教程将为你提供一个坚实的Ruby编程...
在Ruby编程语言中,对目录的操作是至关重要的,特别是在处理文件系统时。下面将详细介绍如何在Ruby中进行目录的创建、删除、查询、修改以及读取文件等操作。 1. 创建文件夹 Ruby提供了多种创建文件夹的方法。例如,...
在Ruby编程语言中,"面向对象的枚举"是一个重要的概念,它结合了面向对象编程的灵活性和枚举类型的效率。Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举...