不为啥,工具而已。用凳子也可以钉钉子,但有些人觉得榔头更合适。
其实用 Object.observe()是方向,不过这升级也升得够坑的 :)
少追新鲜知识,多看经典。新鲜知识既看不懂也看不完,浪费时间,徒增烦躁。多读经典,长期受益。
不理解你为什么要在 Chrome 里面用 Firebug。Chrome 自带的调试器比 Firebug 要好用,而且还可以加入其他的开发插件。另外,这个 chrome 版本的 Firebug 是 lite 版,要真喜欢用 Firebug, 不如直接用 Firefox,
没有有经验的开发者, (不知道有没有充分的调研),就这么把一个成熟的应用随意转换框架和语言,感觉有些儿戏。
@chairy11 负责 js 处理的是 Excjs, 这个 therubyracer 只是一个 v8 包裹。有 node.js 就可以,也需要把它去掉。
没有装过,直接用 node.js 好了,很多地方都需要。
我一直用的 Neocomplete。最开始还很认真地去组织了一下语言的 snippets, 用了一小段时间后全部放弃,只补全本页和 buffer 里面的单词,其余全靠脑子,感觉舒服多了。
@jiyinyiyong 多谢!你提到的文章也很好 :plus1: 。一点建议,要是有个例子就更好了,比如说什么是你认为的复杂的绑定,为什么 React.js 能够比 Angular, Backbone 等更好地解决这个问题等等。
看了楼主写的几篇文章,觉得很棒。但有问题请教楼主,常规级别的绑定各个框架都可以做,就连 Backbone 都有方便的插件。React 固然响应快速,但有了这个以后 http://www.html5rocks.com/en/tutorials/es7/observe/ 它还有什么优势呢
Javascript 的事情还是找 Node.js 吧。你用 Grunt.js 的话自己写个任务就行了,很简单的。Ruby 写当然更简单,但你确定你的 Javascript app 需要一个 Gemfile 吗。
后面还有无尽坑,慢慢折腾吧。与其花无数的时间对付 windows,为什么不花十分钟看看别人为什么不用 windows。
最简单的方法,Ajax 请求之后后端直接输出需要的格式,Javascript 直接拿来用就可以了。
楼主和一楼的写法都有问题。
楼主的写法,用 model 至少还能保证 transaction。你用了 service 连 transaction 都丢了,得不偿失。而且 service 调用太复杂,本身就是为这个 action 服务的,又不准备复用,全部写进去又何妨。
一楼的写法更有问题。你不是处理掉了垃圾,而是把垃圾分类放进了另外几个隐蔽的垃圾箱而且更容易腐败。另外,你自己的业务逻辑为什么要放在 ActiveRecord module 下面。
@robot_zhang 用 Draper 就好处理了。
这个新场景,最好不要直接product.cover.url
或者product.cover.try(:url)
,违反 Law of demeter。用 Draper 的话就建议这样:
#Product
def cover_url
cover.url
end
#ProductDecorator
def cover_url
object.cover_url || '-'
end
会比较干净。
这个不是用 try 的场景,title 是 product 本来就有的方法,即使为空也不会报错。在 title 为空的情况下, product.title
和product.try(:title)
的结果都是 nil。
最简单也最好的处理方法:不允许关键 attribute 为空。
如果不需要处理为-
, 那么直接<%= product.title %>
,没有问题。因为nil.to_s
结果为""
。
如果空 title 变成-
的逻辑只应用在单个特定的 view 里面,那么直接<%= product.title || '-' %>
如果以上逻辑普遍适用所有 view, 最好的方法是用 decorator。
如果你不习惯或不需要用 decorator, 其次的方法是改写 model#title。
def title
read_attribute(:title) || '-'
end
哈哈,这得多苦大仇深才能总结得这么精辟啊。
@hooozer 重点不是亢余。是let
要改成let!
。 let
是懒惰的,不呼叫不工作, let!
会在定义时工作。这个情景必须先有数据在数据库里面,访问才能看得到东西。
@hooozer 你最后贴的问题不关 symbol 的事,m 是什么内容连 Ruby 都不明白,还到不了 FactoryGirl。
主贴里面最明显的问题就是let
在这里必须换成let!
。这个必须改。在 Capybara 请求之前数据必须实际存在于数据库里。
其次你的创建正常用户部分的代码重复,可以提到最高阶的 before block 然后把其余的删掉。这个可选。
楼主加油!
纯干货,强 :plus1:
停止开发另一个采集器吧,人生还有许多其他更有意义的事情。
何必跟自己过不去呢,有时间多陪陪孩子多好。
不是的,scope 是可串的,SQL 直到最后需要 array 的时候才会生成。
另外,page 的实现一般是用 offset, 就是单页的数据量。
如果 Comment 只与一种 member 有关,比如说 author, 这也是通常情况,那么直接belongs_to :member
就好了。
如果你后来要加功能,打比方说加一个 editor, 那么写的时候可以改成你的 author_id 方案,并加 migration。
如果你写第一个功能的时候预见到了第二个功能可能会需要,那么写第一个的时候可以直接写复杂版。如果第二个功能根本不需要,直接写最简单版本。