原文刊载在 ITey.com 上,推荐阅读:http://www.iteye.com/news/25074
原文这里:http://www.mikeperham.com/2012/05/05/five-common-rails-mistakes 评论里很多不同人的经验 作者有很多异步和高性能 Rails 开发的经验。他最近搞的 sidekiq 据说比 resque 性能
我感觉 rails way 不是 oo way,rails 本身的一些东西会误导开发者,比如它的表单,特别是嵌套表单,写习惯很容易让开发者觉得暴露对象内部结构是再正常不过的事情。再比如它的 try 方法,也同样让开发者养成不封装的习惯。还有关联对象的一些方法例如:user.books.build/create、user.books << book 等等。所以第 2 点挺正常的。
第 3 点 在 helpers 中连接 HTML
我们遇到的问题是
content_tag :url do
content = content_tag(:li, '1')
content += content_tag(:li, '2')
content += content_tag(:li, '3')
content += content_tag(:li, '4') if some_thing
end
很多加号,感觉很怪异
我们的写法是这样
contents_tag :url do |contents|
contents << content_tag(:li, '1')
contents << content_tag(:li, '2')
contents << content_tag(:li, '3')
contents << content_tag(:li, '4') if some_thing
end
contents_tag 函数如下
def html_contents
contents = []
result = yield contents
if contents.count > 0
contents.join(' ').html_safe
else
result
end
end
def contents_tag(tag_name, options = {}, &block)
self.content_tag tag_name, options do
self.html_contents(&block)
end
end
#5 楼 @quakewang 有点时候我也在想,是不是没有必要,是不是有更加简单的方法。
我写那两个函数主要解决的以下问题,
当 content_tag 中的第一个内容的值,不是必然存在, 是否存在,需要逻辑判断,来决定的时候, 比如
content_tag :ul do
contents = ''
contents << content_tag(:li, '1') if some_thing
contents << content_tag(:li, '2')
contents << content_tag(:li, '3')
contents << content_tag(:li, '4') if some_thing
contents.html_safe
end
#5 楼 @quakewang 是不是喜欢与不喜欢的问题,是性能的问题
irb> s = “a”
=> "a"
irb> s.id
=> 24113052
irb> s << "b"
=> "ab"
irb> s.id
=> 24113052
irb> s += "c"
=> "abc"
irb> s.id
=> 24201084