感觉装个类似 whoscall、搜狗号码通的软件还是比较有必要的。这种电话或者短信一进来,就会显示像“高频封锁电话”之类的提示。
外面套了
<% @product.photos.each do |pho| %>
里面就需要再把 pho 传给 fields_for:
<% @product.photos.each do |pho| %>
<%= f.fields_for pho do |photo| %>
另外如果你是想修改 photo 对象本身的图片文件而不是把整个 photo 对象替换掉,需要给 accepts_nested_attributes_for 传个参数 :update_only => true
还有,其实你这种情况好像没必要在外面套个 each,我看这段代码无非就是想引用那个 photo 对象嘛,直接用原来的代码改改:
<%= f.fields_for :photos do |photo_fields| %>
<% photo = photo_fields.object %>
<%= image_tag(photo.image_url(:small)) if photo.image?%>
<%= photo_fields.file_field :image %>
<%= photo_fields.link_to_remove "删除", class: 'btn btn-mini btn-success' %>
<% end %>
<p><%= f.link_to_add "增加图片", :photos, class: 'btn btn-primary' %></p>
我刚试跑了一下 minitest,它的 describe 方法好像跟 rspec 的作用一样。
在 rspec 里 context 只是 describe 的一个别名。
实际上我一开始觉得 RSpec 的优势在于它能够更好的组织测试代码,因为它的变量作用域划分很灵活,加一层 describe 就是一个新的作用域,然后就可以为这个 example group 新写一个 before :each。
嗯……test unit 也能,但是好像大家并没有都在正确的用。后来在用 test unit 的那段时间里,我总觉得如果用 test unit 写测试的话,应该对某个类的每一个功能(方法)分别写一个 TestCase 类,然后再在这个 TestCase 类里遵守 one assertion per test 的原则。而不是把针对整个类的所有方法的测试都塞到一个 TestCase 类里,因为被测类的不同方法需要的 setup, teardown 可能都不一样。把整个类所有方法的测试都塞到一个 TestCase 类里的话,结果测试代码很容易就是一团乱,比如说你需要在测试方法里做一些本来是 setup 做的事。当然也就只是这么想想,没有去打破团队里大家的习惯自己一个人尝试这么干。
所以我后来一直觉得这两个用哪个都无所谓,用好了都一样,用不好……也都一样。
@liwei78 我觉得面向对象就是管理代码复杂度的一种方法。我想代码之所以复杂,一是因为逻辑重复、二是因为不好的命名、三是因为过于细节,层次不分明以致于人脑处理不过来。
程序员可以用面向对象语言的封装、多态等机制来去除重复、隐藏细节、良好的命名以表达意图。
那些设计模式、重构手法,讲的都是这些东西。
如果你手边有《Everyday Scripting with Ruby》,可以看看第 7 章“假设式脚本编写法”。
或者如果有《The RSpec Book》的话,看看第 8 章第 2 小节“The Code You Wish You Had”那一部份。
或者如果你读过《重构》,可以试试把这句话倒过来理解一下“我们应当遵循这样一个原则,每当感觉需要注释来说明一些什么的时候,就将要说明的东西写进独立函数,并以其用途(而不是实现手法)命名。”——既然要把细枝末节的代码写进独立的函数,何不一开始就定义好你要的那个函数(方法)而不是把这些逻辑散落在外面之后再回头整理?
这有本《软件工艺》,挺好的。
#31 楼 @shangrenzhidao 是可以调。不过一改连触摸板方向也变了,不能单独改鼠标的滚动方向。
之前我在公司外接键盘和鼠标使用,回家就不带键盘,所以得用触摸板,这样上下班又得分别调整一次。
家里也有键盘和鼠标,不过是给另一台自己的笔记本用的。
可能像我这样的情况比较特殊吧。
我觉得对付莫名其妙难以理解的概念的方法就是不用它。发现问题,然后解决问题就好了。真正的问题如果没被发现,用起来也是乱用,反而会制造更多的问题。同时你也没法保证人家提供的东西就是对的。
还有一个 bug 是广告邮件不带退订链接。
http://ruby-china.org/users/city/%E9%95%BF%E6%98%A5 好像长春人好少,比厦门还少。
比较兴趣知道的是社区里有多少团队的 db migrations 是可以让一个新人加入团队搭建环境的时候正常从头跑到尾的。
最好就是让他兴趣什么学什么,把选择权还给他,不要老是“让他学 XXX”。真的肯学、学精的前提就是兴趣,愿意自己花时间去钻。这年头,喜欢把自己搞得很伟大的样子、自以为是的人太多了,尤其是当家长的。路是要自己走的。况且有很多事情你真的不能保证自己是在帮他还是在害他。
#32 楼 @nickelchen “技术大拿”的责任主要在于少 主动 的误导人,同时尽量做好自己就已经很伟大了。自己都做不好还总想着拯救世界就算了吧。
有 Linux PC HiFi 玩家不?介绍点优化经验呗。
p.s: ubuntu -> gentoo (强力工具需要强力掌握,于是) -> arch
一个 NERDTree 打天下