mysql in 用法 in中可以接受一个多个值
mysql upper用法 将参数转为大写
mysql like %query% query 前面的百分号表示query前面的0或多个字符,query 后面的百分号表示query后面的0或多个字符
'hello'.gsub(/正则表达式/, '替换的值') gsub方法的用法就用将一个字符串去匹配参数一中的正则表达式,用第二个参数的值去替换匹配出的字符
' hell0 '.strip 表示去除字符串前后的空格
'hello'.is_a(String) 是判断'hello'是不是String类的一个实例
'Hello'.downcase 将这个字符串中的大写字母转为小写
'Hello'.tableize 将这个字符串转为表的名字比如 'Hello'.tableize--> hellos
:hello 是ruby中的Symbol
'hello'与:hello区别
a = 'hello'
b = 'hello'
当把'hello'赋值给a的时候,内存给a分配了一个内存空间
当把'hello'赋值给b的时候,内存给b又分配了一个内存空间
:hello
a = :hello
b = :hello
当把:hello赋值给a的时候,其实是把:hello的引用给了a
当把:hello赋值给b的时候,其实是把:hello的引用给了b
user.send(:username) == user.username
unless 除非什么?
false
do ....
end
true
do....
has_one :dependent => :nullify 表示将外健设置为null
has_one :conditions => 条件 指定关联的对象必须满足conditions条件的
accepts_nested_attributes_for :address, :allow_destroy => true # 创建 address_attributes= allow_destroy表示这个属性可以被销毁
在where中,可以用? 做占位符,如果这个参数在多个地方都用到,可以用Symbol类型占位符,写法 where('a = (:a)',:a=xxx)
validates_presence_of if true就去验证,false不去验证
def self.per_page ; 20 ; end 一些很短的方法可以用这种形式写,;代表这这行语句的结束
super()调用父类的super所在的那个方法,super在那个方法调用,就去调用父类的这个方法
''.nil? 判断这个字符串是不是nil ''不等于nil
''.blank? 判断这个字符串是不是空白,''也属于空白
''.present? 判断这个字符串是不是存在,''也属不存在
has_many :through 是指通过那个model来关联
正则表达式
| 左右两边表达式之间 "或" 关系,匹配左边或者右边
()
(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
举例5:表达式 "Tom|Jack" 在匹配字符串 "I'm Tom, he is Jack" 时,匹配结果是:成功;匹配到的内容是:"Tom";匹配到的位置是:开始于4,结束于7。匹配下一个时,匹配结果是:成功;匹配到的内容是:"Jack";匹配到的位置时:开始于15,结束于19。
举例6:表达式 "(go\s*)+" 在匹配 "Let's go go go!" 时,匹配结果是:成功;匹配到内容是:"go go go";匹配到的位置是:开始于6,结束于14。
举例7:表达式 "¥(\d+\.?\d*)" 在匹配 "$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5";匹配到的位置是:开始于6,结束于10。单独获取括号范围匹配到的内容是:"20.5"。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
"hello abc haha denghaigui".strip.split(' ') --> ["hello", "abc", "haha", "denghaigui"]
%w(a, b, c) --> ["a, b, c"]
''.intern 将字符串转为Symbol类型
a = [1,2,3,4,5] a.reverse[0] --> 5 反向取出 a[1..3] --> 2,3,4 从下标第1个开始,到下标第3个结束 a[-1] --> 5 下标是负数这表示从数组的尾部开始获取从-1开始
[].empty? 判断数组是否为空
{}.empty? 判断Hash是否为空
users << user # users is Array ,user is object ‘<<’表示把右边的添加到左边数组中,就像调用users.push(user)
大量使用了 do... if boolean 让代码更佳简洁清爽
do... unless boolean
*args 可变参数,
def test(*args)
a = args[0] --> 1
a = args[1] --> 2
a = args[2] --> 3
a = args[3] --> 4
end
test(1,2,3,4)
includes和joins去区别
joins会产生 1+N 问题
includes不会
Time.zone.now.midnight.utc 就是得到今天00:00:00的UTC时间
Time.zone.now.midnight.tomorrow.utc 就是得到明天00:00:00的UTC时间
Time.zone.now.midnight.tomorrow.utc+ 1.days 就是得到后天00:00:00的UTC时间
Time.zone.now.beginning_of_month.utc 这个月的第一天
Time.zone.now.beginning_of_week.utc 第一个工作日 星期一开始算第一个工作日
Time.hour 获得小时
Time.min 获得分钟
Time.sec 获得秒钟
''.constantize 试图去上下文找与字符串中指定的名称的类
rescue 错误或异常 当这个方法出现错误或异常的时候,就会去做do...
do...
end
cattr_accessor :name #cattr_reader:name cattr_writer:name
cattr_reader:name
cattr_writer:name
def name # cattr_reader:name
@name
end
def name=(:args) #cattr_writer:name
@name = :args
end
ASSETS = %w(all tasks campaigns leads accounts contacts opportunities) 大写字母定义的变量我们叫它常量
[].include?(args) 判断数组中是否包含args
Object.freeze 冻结,不能修改的
Object.dup 浅拷贝一份Object对象