#4 楼 @cisolarix 是啊,如何进行复杂 Rails 项目的模块化,本身就可以做一个大 topic 了,时间受限,没法展开,也许今后可以分享一下薄荷这方面实践的经验教训。
#12 楼 @flypiggys #1 楼 @JackyGuo 真的抱歉!主题没有选好,也没有讲好,让大家失望了。
#9 楼 @xiaoronglv #10 楼 @meeasyhappy #11 楼 @nowherekai 哈哈,还有很多没有提到的内容~~
因为 "http://www.baidu.com/xEA\xE6"
包含了非法的 utf-8 字符
str = "http://www.baidu.com/xEA\xE6"
str.valid_encoding? # => false
解决办法,先把 str 中得非法 utf-8 字符替换掉,比如替换成 ?
for i in (0...str.size)
unless str[i].valid_encoding?
str[i] = "?"
end
end
str.valid_encoding? # => true
enjoy!
#38 楼 @lithium4010 看到你做的应用,不错,回头聊一聊,哈
@dfguo cool! 一定要抽空拜访一下。
招聘还在进行中,欢迎自荐或推荐,哈~
#24 楼 @feitian124 哈,很棒!男人减肥不易!
#19 楼 @waitingaminute 薄荷是一个改变美女,造就美女的地方,薄荷的美女真的很多啊,员工或是用户,很多的美女~~~
@ichord 有没有兴趣来上海发展呢?
#3 楼 @xiaoronglv #2 楼 @mingyuan0715 一个老中医,一个老西医,中西合璧,哈哈 薄荷的团队,都是非常 NICE,非常热心的人,下面是 部分同事的 Blog
想和他们一起结对,一起享受 coding 的乐趣吗?那就赶快来吧~~
更多关于公司和团队的信息,也可看看以前的招聘贴 https://ruby-china.org/topics/13680
#116 楼 @gene_wu 我的放到 slideshare 上了,http://www.slideshare.net/vincent253/love-ruby
@iBachue 第 5 题挺有意思,赞一个!对 Ruby 新手很有挑战,对 Ruby 老手也不见得那么轻松,需要熟悉元编程一些知识,建议大家都做一做,练练手,嘿嘿
#1 楼 @Justin #3 楼 @sevk #4 楼 @awking
准确的说,::A::B 才是绝对路径,A::B 和 B 都是相对的。 程序在解析时,当遇到常量后 A 或 B 都是常量(模块),根据常量的查找规则找到对应的常量。 如果想了解常量查找路径,这篇文章讲得最清楚 Everything you ever wanted to know about constant lookup in Ruby http://cirw.in/blog/constant-lookup
我以前也遇到过常量查找的困惑,可以看看这个帖子 https://ruby-china.org/topics/4777 。
def self.find_account_money
users = self.select("id, name, (#{Account.select("SUM(money)").group("user_id").where("accounts.user_id = users.id").to_sql}) AS user_money")
users
end
这个写法太丑陋了,错误的本质是硬凑 sql 导致语法错误了。 完全可以通过
user_accounts = Account.select("user_id, sum(money) as user_money").group("user_id")
得到你想要的分组汇总数据。
如果想用 count,可以这样
# 全部 user count
User.count
# 有 money 的 user count
Account.count(:user_id, distinct: true)
因为公司里要做 Git 的技术交流分享,所以这段时间仔细研究了 Git 背后的原理,原本我打算写一篇详细介绍 Git 对象模型机制的文章的,忽然发现 @xiaoronglv 已经写了,而且写的相当不错,我也就懒得再写了,哈哈。
我把原先准备的一些素材发一下吧,理论的东西小荣的文章已经讲了不少,我就上一个鲜活的项目例子吧。
一个纯研究演示 Git 对象模型的项目,项目在 https://github.com/xiewenwei/dig-git,总共有 5 次 commit(包括一次 merge),都是很简单的内容,我们可以仔细观察一下每一 commit 之后 Git 对象模型图,以此分析 Git 存储的原理。
如图所示,生成了 3 个对象,一个 commit 对象,一个 tree 对象,一个 blob 对象。图上蓝底是 commit 对象,灰底的是 tree 对象,白底的是 blob 对象,每个对象节点的标题是对象的 key (SHA 摘要) 缩略表示。 对于 commit 对象,tree 内容表示这个 commit 对应根目录的 tree 对象,parent 表示父 commit 节点,通常 commit 只有一个父节点,也可能没有(首次提交时 parent 为空),也可能有多个(合并节点),commit 对象还保存了 commit message 等信息。 对于 tree 对象,里面的内容包含了文件名,文件对应的 blob 对象的 key,或者是目录名和目录对应 tree 对象的 key。 对于 blob 对象,表示一个实际文件对象的内容,但不包括文件名,文件名是在 tree 对象里存的。
这个图怎么得到的呢?主要是两个命令:
git log
命令获取最新 commit 的 key通过 git cat-file -p <object key>
获取 key 对应 object 的内容,根据 object 里的内容,继续探索,就可以访问到所有关联 object.
因为 a.txt 文件已经修改,生成了一个新的 blob 对象,tree 对象和 commit 对象。如图所示,commit 对象之间是有关联的,新提交的 commit 对象的 parent 是上一次提交的 commit 对象。
如图所示,目录是有一个 tree 对象表示的,里面的内容指明了目录包含的文件或子目录。
0c5ca 对应的 commit 对象就是生成的分支 test1 中的。分支在 Git 中是一个非常轻量化的操作,建立分支甚至都不增加新的对象。
def18 就是合并后的 commit 对象。合并生成了一个新的 commit,这个 commit 的 parent 有两个,指向合并的两个原分支对应的 commit 上。
抱歉没有写得很详细,恐怕需要自己参照例子试试一看看,搞明白这些图,也就能搞明白整个 Git 对象模型机制了。
#79 楼 @gene_wu 已经上传了 ppt,我新开了一个帖子 https://ruby-china.org/topics/20620 slideshare 的网址 http://www.slideshare.net/vincent253/redis-37221509
珍爱生命,远离 mongodb