其实 simple captcha 也可以不依赖 RMagick 的:
SimpleCaptcha.backend = :quick_magick
:plus1:
别闹...
所谓 Next key lock 其实是一个 record + 2 个 gap,即[22, 28) + 28 + [28, 32) => [22, 32)
另,如果是 unique index 会退化成 record lock.
------ update -----
两个 gap 的说法不太合适,on every record the search encounters
其实因为 btree 的有序性,在非 unique index 的情况下(本贴的例子),这个查询其实 scan 了两个 record,即 28 和 32,扫 28 的时候 gap 是 [22, 28),并且加 record lock(28),扫 32 的时候加的是 [28, 32),因为 32 没中,所以没加 record lock。
curl -X GET 'http://localhost:9200/users/user/_search?pretty' -d '{
"query":{
"function_score":{
"params":{
"lat":23.1191,
"lon":113.31
},
"script":"doc[\"location\"].distanceInKm(lat, lon)",
"lang":"groovy"
}
}
}
'
用 function_score:
curl -XGET "http://elastichost:9200/plus-customers/_search?pretty=1" -d'
{ "size": 5,
"query": {
"function_score": {
"script_score": {
"script": "Math.pow(doc[\"customer_type\"].value, 2)",
"lang": "groovy"
}
}
}
}'
results:
"_score" : 81.0
简单的说就是按照使用的索引顺序,当然这个大部分没有条件情况下是主键顺序...
你用同一条语句去查,加上force index
看的效果更明显。
each_slice(2).to_h
def fn (arg)
if arg < 0
0
else
arg
end
end
3 . ruby 方法的执行结果默认为最后一条语句的结果
这句并不完全正确。以等号结尾的方法是特殊情况:
def name=(a)
@a = a
a * 2
end
result = (self.name= 'hello')
result #=> 'hello'
"e38080e38080312e20e4b8ade59bbd20312c3336312c3531322c3533350a".scan /../
touch ~~~
正好前几天也遇到了,重现过程大概这样:
irb(main):043:0> city = "Montréal"
=> "Montréal"
irb(main):045:0> city.encode! 'iso8859-1'
=> "Montr\xE9al"
irb(main):047:0> puts city
Montr�al
=> nil
irb(main):048:0> city.force_encoding 'utf-8'
=> "Montr\xE9al"
irb(main):049:0> city.valid_encoding?
=> false
其实就是对方给你了一个非 utf-8 字符,你把它当成了 utf-8 处理,不兼容的时候当然报错了。
另,对于 invalid 字符,会被 Rails(具体哪部分记不得了) 转成\xED\xA0\xBD
JOIN 是inner join
哟!和left join
的效果可不一样...
看起来不错~~~
理解了 MVC 的 data flow 图就明白了。
– 输出时保留 null, 但排序时转换为 0 :
select name, points
from users
order by coalesce(points, 0) desc;
这样 order by 就无法利用索引了,可能用 union 会好一些。
金钱比较问题的一个 tips 是可以使用 to_d 来比较,比如order.total > params[:total].to_d
,前提是 total 已经存成了 decimal。
:plus1:
看起来整齐就写,比如:
def xx
return 1 if xxx
return 2 if xxxxx
return 3
end