@huacnlee 奇怪,#2,5,6,8,9,17,18,19,24 都有问题,其他贴子也有问题,如:Tunnelbear 很赞的梯子的 2 楼等也有问题,好象是随机的。 退出登录后,还是可以喜欢除上面之外的所有楼。看起来 unit test 是会有些问题。
问题好象是 Fix #281, Now will redirect to login page when unlogined user clicked…里的 25 行 current_user。
我在淘宝刚买了白色无刻的,加运费 1611,比楼主贵 37 块,不过第 2 天就送到了。键盘是工作需要,比起其他的电子消费品更应该投入,只要贵得有道理,贵点无所谓。
6 个开关我只开了 sw2。编辑器用 textmate2,^a^e^f 都已经被定义过了,^f 是 Text Bundle 占用的改掉就可以,^a^e 是 Emmet 占用的要到系统设置的 keyboard 的 shortcut 的自定义里加 Textmate2,再加条目,菜单名和快捷键。这几个改为其它的快捷键后,^a^e^f 就回来了。
这样基本无忧。至于 vim 和 emacs,还是更习惯 tm。
剧透一点里面的 keynote
Splitting up functions to support the testing process [destroys] your system architecture and code comprehension along with it. Test at a coarser level of granularity. -- James Coplien "Why Most Unit Testing is Waste"
I got paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence. -- Kent Beck
I didn't have time to write a short letter, so I wrote a long one instead. -- Mark Twain
和一点点笔记 Software writer, not a software engineer. Open your eye to read and write and rewrite. How to improve your code? The delete key.
应该要问另一个问题,开发过程中哪些因素对质量更重要?时间有限的话,花在哪里更有效用? 领域知识、领域建模、需求调查、详细设计、框架、编程、review、交流、测试(各种测试)、文档等等
稍看了下里面的链接的 pdf,感受到了一些观点: 1、系统测试的性价比最高。 2、过度追求覆盖率会伤害到设计与开发。 3、单元测试只在必要的时候做。 4、review 比单元测试更重要。
个人感觉测试就是规范,是质量的保证,对大团队大项目来说更重要,但你付不付得起代价是另一回事。 dhh 应该是反对把 tdd 或 unit test 的重要性绝对化。
#10 楼 @hz_qiuyuanxin 谢谢,你的办法一定可以,但不喜欢 utc 的时区(虽然没有多时区的用户),mysql 的系统一段时间后就要被换掉了,目前用的解决方案运行一段时间后就作废了,所以就这样了。不过,支持你的折腾。 另外,写个 gem 包装一个换时区的 rake task 应该会有用。
#6 楼 @hz_qiuyuanxin 谢谢,是 2 个 orm 并行吗?这任务麻烦啊。那个,我前面说错了,我的次 db 也是 mysql 的。
#7 楼 @emanon 我也不想一起用 psql 和 mysql,但历史遗留的问题一下子没办法解决,现在重做那个用 php 和 mysql 的系统。
对查询,因为我的查询界面和处理是自动的,问题不大。对转换数据是有这样的问题,范围比较小,不管了,先跑起来再说。
另外对于 PostgreSQL 来说,数据库的 timezone 和当前 session 的 timezone,你在进行操作的时候,PostgreSQL 是会对其进行处理的,而 MySQL 是不管的。
有没有更详细的资料(参考)?
如果你做好了完整的解决方案,一定告诉我。
和我碰到的问题差不多,主 db 时区是 beijing 的 psql 的,因为历史原因,次的是 utc 的 mysql 的(也就是没有减 8,还有其他的程序跑在这个 db 上)。config 里是按主 db 来设的,次 db 只用于查询。下面的做法能用,但 time_zone_aware_attributes 在 rails 里到底怎么处理还没有来得及看。 1、查询条件
# target是一个查询参数,0是类型,1是start,2是end
if 'Date' == target[0]
zone = (get_search_class(params).time_zone_aware_attributes ? "" : " UTC")
target[1] += " 00:00:00#{zone}" if target[1].present?
target[2] += " 23:59:59#{zone}" if target[2].present?
end
2、显示 在次 db 的主类里,加上一个类方法 time_zone_aware_attributes。
class SecondServer < ActiveRecord::Base
self.abstract_class = true
establish_connection :second_server
def self.time_zone_aware_attributes
false
end
end
3、转换数据,每个 date 或 datetime 的数据都转换。如:a.updated_at.try(:to_bjtime) 在一般的查询里是不使用的,只在把这些日期和时间转存到主 db 的时候使用。
class Date
def to_bjtime
Time.parse(self.to_s)
end
end
class Time
def to_bjtime
self.class.parse self.to_s.gsub(" UTC","")
end
end
我的版本还是 11.04 的,想在线升级,怎么样比较稳妥,各位有经验吗?
一个普通的写法
h = {}
key.each_with_index {|k,i| (h[k] ||= []) << value[i] }
class User
attr_accessor :gender, :name
def initialize(arr)
@gender, @name = arr
end
def last_name
@name[0]
end
end
records = %w(男 张三 男 李四 女 张洋 男 李五 女 潘潘).each_slice(2).collect {|arr| User.new arr}
def group_hash(records, attr_k, attr_v)
records.collect(&attr_v).group_by.each_with_index {|v,i| records[i].send(attr_k)}
end
group_hash(records, :gender, :name)
group_hash(records, :last_name, :name)
irb(main):598:0> group_hash(records, :gender, :name) => {"男"=>["张三", "李四", "李五"], "女"=>["张洋", "潘潘"]} irb(main):599:0> group_hash(records, :last_name, :name) => {"张"=>["张三", "张洋"], "李"=>["李四", "李五"], "潘"=>["潘潘"]}
在这个贴的 22 楼,我写了个 trytry。一般情况下 我都在 model 里写,分页后没怎么考虑效率问题。
def self.collect_data(search_result)
search_result.collect do |r|
{
'field1' => r.trytry('b.c.d.e'),
'field2' => r.trytry('b.c.f'),
...
}
end
end
当然也可以考虑 把 field1 和 b.c.d.e 的这个关系保存起来,命名一个 collection_name, 给 arel 的结果集加上 collect_data(collection_name)
我乱讲 1、加 log 表、每次订单状态变更记录用户 id,ip 等。 2、某一金额之上的,如 1 万元之上的订单状态变更人工审核。 3、异常监视,一些非正常的事件(如经常有非法访问)的 ip 记录下来加入当天黑名单,在这些 ip 之上的订单状态变更也要人工审核。 4、在订单状态中,如果要变更到已付款的状态,付款的凭证比对等。 5、其他服务器安全性的要求。
是不是这段要加在上面的 callback 里
$("#building_group_id option").each ->
$(this).attr "selected", true if $(this).val() is building_group_id
应该不是这个问题,我把 validate 搞混了。应该是你的 before_filter 里逻辑的问题。
问题是 redirect_to 用在这里好不好,感觉还是先返回 true,false 会比较好,alert 放在暂存里。
redirect_to posts_url, alert: "此板块不允许发帖" if @forum.id < 6
is_new_user = Time.now < (current_user.created_at + 7.days)
today_posts_count = Post.where("author_id = ? AND created_at >= ?", current_user.id, Time.now.at_beginning_of_day).count if is_new_user
redirect_to posts_url, alert: "未满一周用户每天只能发5篇帖子" if is_new_user and today_posts_count >= 5
true
用户分表,按某个 hash 方式。 关注与被关注,做序列化的 2 个字段跟着用户分表。 共同关注就直接计算了。
谢谢,要这样写:Post.where("id = ?",1).first.try(:title)
#11 楼 @Kabie 我写了一个 trytry,象这样:a.trytry('b.c.d.e') haskell 不熟悉,看着语法不是太喜欢,我会选择在 ruby 里做补丁,然后等 matz 把好东西都拿过来。
module Object
include ModuleBase
def trytry(sym_list, value=nil)
return self if value.present? and sym_list.last != '='
receiver = self
sym_list.to_s.split('.').each do |field|
if field.last == '='
receiver.try(field, value)
receiver.save!
else
receiver = if field =~ /\(/
params = field.gsub(/[ \):]/, '').gsub('(', ',').split(',')
receiver.try(params[0], *params[1..-1])
else
receiver.try(field)
end
end
end
receiver
end
end
Post.find(1).try(:title)
关注,谢谢
还有%操作符 %的用法(即 sprintf)
irb(main):125:0> '%02d' % 9
=> "09"