不过我觉得 Rails 的 ActiveRecord 是比 Martin 的 AR 模式复杂很多的实现,用来实现复杂的领域模型也没问题,但是要求领域模型和数据库表之间的一一对应,不然会有些麻烦。
这种方法是不好的,创建和更新是两个不同的业务逻辑,需要不同的接口,即使处理的代码有很多相似的地方,也不要合成一个。分开的好处是单一职责,和在一起肯定会增加复杂度,另外就是容易扩展,如果以后两个接口处理的逻辑又有不同,就要再加 if-else 判断是 create 还是 update。不过你应该都知道,那就是沟通和说服别人的问题了,这个是最难的,慢慢来。
[n, i].max
做了优化,并不是普通的创建临时数组,不过性能完全依赖实现细节吧
ruby --dump insns test.rb
local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 1] i<Arg>
0000 nop ( 2)[Bc]
0001 getlocal_OP__WC__1 n ( 3)[Li]
0003 getlocal_OP__WC__0 i
0005 opt_newarray_max 2
0007 leave
opt_newarray_max 用来比较
如果是走上半部分的话貌似就不会创建临时数组了
static VALUE
vm_opt_newarray_max(rb_num_t num, const VALUE *ptr)
{
if (BASIC_OP_UNREDEFINED_P(BOP_MAX, ARRAY_REDEFINED_OP_FLAG)) {
if (num == 0) {
return Qnil;
}
else {
struct cmp_opt_data cmp_opt = { 0, 0 };
VALUE result = Qundef;
rb_num_t i = num - 1;
result = ptr[i];
while (i-- > 0) {
const VALUE v = ptr[i];
if (result == Qundef || OPTIMIZED_CMP(v, result, cmp_opt) > 0) {
result = v;
}
}
return result == Qundef ? Qnil : result;
}
}
else {
VALUE ary = rb_ary_new4(num, ptr);
return rb_funcall(ary, idMax, 0);
}
}
写的不错,ruby hacking guide 中用的是 ruby 1.7 作为例子,那个版本的 gc 代码比较简单,可以看一看,后面就变的越来越复杂了。 另外推荐《垃圾回收的算法与实现》,介绍了其他几个主流 GC 算法。
原来为啥用 Sinatra?现在为什么要换?
这篇帖子的作者算活跃人士吧?
这篇说 stackoverflow 上关于 rails 的问题下降趋势挺明显的,比较奇怪。
sanitize_sql
即使算不过周末,平均一天 100 多行代码也不算低效,应该比较高了
哈哈,我还挺喜欢 clojure 的,不过社区不活跃,看 https://github.com/clojure/clojure 最近的 commit 还是 5 月份的
clojure 写 web 太蛋疼吧?没有什么像样的框架。
用 Ruby 的 attr_accessor, 然后 controller 里面调用方法就行。不过干嘛不用 Rails5 的 custom context 呢?
"在缓存里设置 uuid 肯定不行,同一秒发生的请求,缓存也会同时两个一起查和写" 加锁就行了
mysql 5.7 是秒后面还有小数 有https://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
为 uuid 和 created_at 创建联合唯一约好像不行吧?created_at 的精度不是秒。 一个做法是生成账号后,缓存里面给这个 uuid 设个值,以一个过期时间。每次建的时候先查缓存,没有再建新的。
Topic.joins(:votes).group("topics.id").select("topics.*, count(votes.id) as vote_count").order("vote_count desc")
姜叔叔... 你们都是 00 后?
认同 @adamshen 的说法,大局入手和了解变化这两点对有一定经验的人来说是适用的(比如掌握了一门语言/框架后再去学另一个语言/框架),对没什么经验或着经验很少的人来说没必要从这两点入手。
三楼的说法是对的,不过这样的配置数据库里存的并不是 utc 的值,还是北京时间。但是显示整个 Model object 的时候,因为会调用 TimeWithZone#to_s(:db), 所以会转成显示 utc 时间。当你实际实用的时候,比如User.find(2).user_signin_logs.order(created_at: :desc).first.created_at
这是显示的就是北京时间。
另外 @hz_qiuyuanxin 这样的配置其实是有个问题的,比如我用户都是国内的,就没必要 config.time_zone = 'UTC',那样配置的话显示的都是 utc 时间,不是本地时间。比如 ruby china 的配置就是 config.time_zone = 'Beijing'
这两种编码的字符串只能部分情况做连接运算,就是当它们是兼容的时候,比如 UTF-8 和 ASCII-8 对 ASCII 是兼容的(英文字母,数字,控制字符)等,是可以连接的,如果不兼容的时候是不能连接的。
Rails 可不是 Rack 封装了一下而已,Rails 中 Rack 部分非常少,更多的是 MVC 的部分,可以理解为 Rails 是一个 Rack application 加上 MVC 部分。
5 的时候就加了吧?除了一楼的还可以 belongs_to :user, optional: true
方便说下转什么语言以及转的原因吗?
rails 5 可以 Company.where(size: :large)
了
恩,这样的事本来就很复杂,有很多可以讨论的点。
我现在看这种热门事件报的态度是这样的:趁机多学点知识,以后发生在自己身上的话可以应对。
比如去年和今年就大致知道了期权、股权到底是什么,还知道了国内没有关于这方面的法律,CEO 想坑你你很难预防等等。
可以等两天再看。不过那几篇全是动机揣测,诉诸感情,没法看。
周末又看了一下,关于男主技术怎么样或者女主是不是胸大拜金,我不关心。 我关心的是当初承诺人家股份,后面有没有给。 至于现在技术不行了不能当做不给股份的借口,因为股份是人家以前答应和你一起干承担的风险,不是现在的。
CEO 公关很成功,只可惜根本的问题跟上次冯大辉事件一样不了了之。以后技术合伙人没人会信期权股权了吧?
可以等两天再看。不过那几篇全是动机揣测,诉诸感情,没法看。
#7 楼 @hiveer
我用 mac 上的 Dash 看<=>
能看对应的 C 代码,还不够就是看 ruby 的source code 了