一边学,一边在做项目,前段时间把 ruby-china 的源码 clone 了一份到本地,用心的在研究,先谢谢论坛的大神哈,受益良多,谢过谢过 :)
今天看到一个小细节,没看懂,向大家请教一下:
论坛功能中,在每次回复后,都要去更新帖子的最后回复人以及最后回复时间:
在代码reply.rb
及topic.rb
中
reply.rb
中的代码段:
after_create :update_parent_topic
def update_parent_topic
topic.update_last_reply(self)
end
topic.rb
中的代码段:
def update_last_reply(reply)
# replied_at 用于最新回复的排序,如果贴着创建时间在一个月以前,就不再往前面顶了
self.last_active_mark = Time.now.to_i if self.created_at > 1.month.ago
self.replied_at = Time.now
self.last_reply_id = reply.id
self.last_reply_user_id = reply.user_id
self.last_reply_user_login = reply.user.try(:login) || nil
self.save
end
没想明白的问题就是:在 topic.rb 的 update_last_reply 中,self 是如何对应上 reply 的 topic 的,没有看到那里有对 self 有显示的指定啊,比如 self=reply.topic,难道这里也是一个 convention over configuration 的案例吗。
感觉好像是我学的时候漏了什么点没学到,问题可能很白痴,但就是没想明白,别见笑哈... :)
另外补充一个问题: 还有那些其他比较优秀的开源项目可以 clone 下来学习,参考一下的。经过一段时间学习跟实际开发之后,再观摩其他大神的 code 方式,应该是,至少我觉得,这个阶段帮助我提升最快的一种方式。从规划,代码风格,以及一些细节实现方式上,都有让人眼前一亮的感觉,比如看 ruby-china 的源码,就让我一路亮着。希望能观摩更多其它大神的佳作,如饥似渴啊...哈哈,论坛 wiki 里也有非常多的好东西哈,谢谢整理 wiki 的大神,,,:)