标题里既有“东京”,又有“热”,很容易看错的
瓜哥,现在在用 sublime 写什么?
@nate_yu 龟哥现在用什么了?
class Post < ActiveRecord::Base
has_one :latest_comment, -> { order(published_at: :desc) }, class_name: "Comment"
end
这样行吧
其实这个问题看了评论后第一直觉就是用一个计算结果表去解决,但是用计算结果表可能让解决这个问题变得烦琐起来,因为计算结果表的数据与表 B 里数据的顺序有关,表 B 数据的计算顺序又不一定与产生顺序一致。这就导致要维护计算结果表数据的正确性,需要做很多事情,我目前想到的有:表 B 插入一条数据后,要向计算表里插入若干条结果数据(也可能同时需要删除更多旧的不正确的数据);也许这个计算过程还没结束,表 B 又插入了一条数据呢?...诸如此类的。 所以我想这可能是题主选择用 sql 解决这个问题的原因,这样可能比较省事(如果这样的 sql 写得出来)
还是 33 是个正经人
武汉的,顶一下
我赞你是因为你的头像
@nate_yu yu ... 来我们这里吧,我们这没金钱也没女人,只有情怀,yu ...
这个贴子很娱乐,代码写累了进来刷一下,偶尔还能看到好段子。真好!
我所见到的,想要在论坛里花钱买代码的,结局大多不好看。要不被嘲讽得要死,要不被骗死。
没打开过的贴子不能回,再点进去的就可以回了
group(:event_time)
@shoushen 我觉得不是“服务新手还是服务老手的问题”。是处在各种阶段的人各取所需。
不友好的偶尔会有,但给帮助的人好像更多吧,把关注点放在对你有益东西上就行了。
看看 @nicetyler 这个用户,前段时间集中提了好多问题,从提的问题看应该是刚接触 ruby 不久,大家对他提的问题好像还是比较热情的吧。
不要教条主义嘛,这么做只是提供一种可能,不是说所有的场景都适合这么用。
记得几年前遇到过一个问题,用这种方式觉得比较合适:当时有一个用户权限的功能在我们多个项目中用到,而且逻辑都相似,后来准备把这部分代码提取出来做成一个 gem,这个 gem 的功能只是与 model 相关,不想就为了 current 就非得侵入 controller,所以后来找到的解决方式就类似于上面的那个方案(当然他这个更完善一些)
这么做的目的就是可以在 model 的代码中直接获取 current 的一些信息,这样的代码不必非得写到 controller 里
可以找个 apm 工具
server {
listen 3001;
server_name a.zyythsx.com;
root /root/ruby/a/public;
}
server {
listen 3002;
server_name b.zyythsx.com;
root /root/ruby/b/public;
}
结了婚再谈为了两个人的未来。在这之前一切都要为了自己的未来,不要让任何人打乱你对未来的规划,不能接受现在的你就果断分,为别人做改变就会让你到现在这种处境。
“从事 IT 的工作”没有速成的,“收入比较可观”!只有在解决问题的氛围中浸润久了,你才会忽然有一天发现能跟人谈价钱了,在这之前谁有资格?有人愿意给你解决问题的机会就不错了。
如果十年前有人跟我讲这段话该多好啊!
get_cached_js_ticket 调用的时候用了 dingding_js_t 作 key,之后在里面又调用了 get_js_ticket,get_js_ticket 里面又用 dingding_js_t 作 key,所以 get_js_ticket 里面缓存的代码永远不会被执行
如果用的是 postgresql 数据库,导完数据,我一般会跑这么一个 migration,让表的 id sequence 值变成最大,就不会有主键重复的问题了:
def change
ActiveRecord::Base.connection.execute("SELECT * FROM pg_catalog.pg_tables where schemaname='public'").each do |r|
next if r["tablename"] == 'schema_migrations'
sequence = "#{r["tablename"]}_id_seq"
count = ActiveRecord::Base.connection.execute("SELECT count(*) FROM pg_class where relname='#{sequence}'")
next if count[0]['count'].to_i == 0
max = ActiveRecord::Base.connection.execute("SELECT MAX(id) FROM #{r["tablename"]}")
start = max[0]['max'].to_i
current = ActiveRecord::Base.connection.execute("SELECT nextval('#{sequence}')")
curval = current[0]['nextval'].to_i
if curval <= start
ActiveRecord::Base.connection.execute("SELECT setval('#{sequence}', #{start + 1}, true)")
end
end
end
projects = Project.where(:name => "test")
projects = projects.where(:language => language) if language.present?
如果仅仅是保存,你这么写多了一次不必要且效率低的查询。 其实我那句还可以写得更简单:
@project.update_attributes(params[:poll])
project.update_attributes(poll_ids: params[:poll][:poll_ids])
[1, 2, 7].sample
project = Project.new(project_attrs)
project.polls.build(poll_attrs)
project.save
有类拟这样一个需求:按一组邮件地址加好友,其中没有注册系统用户的邮件地址,需要发邮件邀请注册用户。 那么这样的代码:
def invite(mails)
signed_users = User.where(email: mails)
add_friends(signed_users)
(mails - signed_users.map(&:email)).each do |mail|
UserMailer.invite_email(mail).deliver_later
end
end
就需要把个方法拆开成便于测试的两个方法来实现,是这样吗? 我就是因为这样的代码不知道怎么测试,才有了上面的折腾,请指教。
这个例子中的业务逻辑比较简单。但在比较复杂的业务逻辑中,对于邮件是否发送,是否发送给正确的用户,如果没测试,我始终感觉不踏实。
?!$ 表示不以某结尾的意思,结合 /\d{3}(?!$)/ 来看表示不是以仅 3 个数字结尾的字符串,说简单点就是匹配大于 3 个数字字符的串