只用一个正则匹配看上去太费劲了。就算你能写出规则正确且运行效率高的正则,代码也很难阅读。
还不如用 .split("@")
拆分成两段,域名部分也 .split(".")
拆分开来,各段分别写验证规则的时候再用正则也行。
参考 Rails 教程里创建 model 但未能通过验证的做法:即使还没存数据库,用户已经把 markdown 内容 POST 上来了。不要重定向,直接拿去渲染就是。
http://guides.rubyonrails.org/getting_started.html#adding-some-validation
可以用这个比较笨拙但有效的办法试试看:
if File.basename(path)[0] == ?.
puts "HAZDOT: " + path # 加入这一行,当某些文件夹的名字满足你的假设条件,就会打印出来
Find.prune # Don't look any further into this directory.
else
next
end
然后运行程序来验证你的假设就行了。
如果要按照 REST 的思路来设计的话,尝试把产品领域里的逻辑概念抽取出来,创建一种业务上能说得通的新资源。
比如说没写完的文章,一般都叫做草稿,那么就先建个 ActiveModel(因为还不需要存到数据库,所以不用继承 ActiveRecord)的子类,名字就叫 Draft
。
这样来说,预览这个功能就等于“创建了一篇草稿”,那么在 HTTP 接口上应该体现成 POST /drafts/
。有了这些思路,再往下自己写控制器,写模板渲染什么的,应该就不需要多说了。
你所面对的问题不是 peatio 特有的,而是因为你对 Ruby 和 Rails 都是从零开始了解。所以你需要去看从零开始的教材。比如去 Rails 官网上的资源开始学起。
就这个特例来说,在不知道语法定义的前提下,自己去探索的难度太大(因为一个问号加一个句点,绝大多数搜索引擎都不知道该怎么索引才好,一般都会在 normalize 的过程中清洗掉)。
来论坛直接提问就是更干脆的方案,而且一楼也有回答,先记住就行了。在知道了这是“单个字符串的字面量的语法”之后,可以在 http://ruby-doc.com/ 上搜索 literal(“字面量”的英文原文)或者 string literal(“字符串字面量”) ,尝试找到官方文档的解释。不过还是因为难于索引的缘故,只能点进搜索结果一行行地细读。
就是单个字符的字符串,没什么“很难确定”的。顺便这是我四年前的同样主题的帖:https://ruby-china.org/topics/11052
即便把下面这段都去掉,也不会影响运行结果
如果你还在初学编程(或者任何一门知识)的阶段,不要有这种“我试着改一下看看这个黑盒能出什么结果”的态度,而是要改成“我现在接触的都是皮毛,所以肯定有人 / 文档能完整解答”的态度。
明白了。Windows 支持这个问题对我来说等于没有,所以就没体验到。
至于说“割裂感”这种事,我也完全不在乎。
那么,和 fzf.vim 方案相比,优势在哪里呢。
模糊查找这个功能我最初用的是 Command-T,后来过了许久才开始寻找替代方案(因为 Command-T 一直够用,没什么大毛病)。最终选用 fzf 方案是因为它可以独立使用,比如说取代 zsh 的 Ctrl+R 去查找历史命令。而且性能与响应性也很棒。再就是项目也足够成熟&流行,能一直维护 / 发展下去。
你需要学着用调试工具去检查不同的渲染环境里,哪些 CSS 规则影响了你正在调试的元素: https://developer.mozilla.org/zh-CN/docs/Tools/Page_Inspector
没有实际处理数据库问题的经验,只有纸上谈兵:
self.account.balance = self.account.money_records.success.sum(:money)
这个实现方案,不仅需要锁 account
记录所在的行,还要设法去锁 money_records
表(锁整表或者按查询条件锁多个行,具体要看数据库是否支持细粒度的锁)。再就是还要从数据库读取 money_records 进来,浪费时间。
如果换作是我来实现,会写成这样:
# @money_record 就是正在检查的,是否已完成金额转移的交易
self.account.balance += @money_record.money
看 Rails 的 API 文档实例,也是这么做的:http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html
话又说回到事务处理:transaction 功能并不能智能地摆平一切冲突问题。数据库可以设置成不同的隔离级别(isolation level)。高隔离级别更能保证数据完整性,但可能会牺牲性能。你的数据库具体支持哪些级别,你的应用场合需要哪种级别,这个只能花时间去研究了: https://www.bing.com/search?q=transaction+isolation
个人行事风格与公司文化不符,虽然帖子第一行就自称是兼职招聘 (说得难听点就叫临时工),但能把招聘工作委托到这样的人手上,公司自己也得找原因。
编辑:其实我对这个公司没什么了解。随口说公司文化有点太武断了。
是的。聚集计算的过程在数据库服务器端进行,具体的实现细节未知也不需要知道(除非因为某些原因造成抽象泄漏,比如要深度性能优化)。
录音效果:麦克风距离音源 (演讲者的嘴) 越近,对麦克风的敏感度要求越低,录入的环境噪音就越少。试试用领夹 + 手机耳麦录音,而不是笔记本内置麦克风。
降噪:OBS 录音是支持为各个音源设置 filter 的,而且自带降噪 / 响度阀值 filter。
画中画:OBS 能做到。最简单的方案是演讲者的幻灯片,摄像头和 OBS 都连接 / 运行在同一台电脑上。
OBS 的设置帮助可以去 twitch.tv 之类的直播网站的帮助文档里找找看,里面有面向非技术专业人士的指南。
这个在 README 里面有写:
It persists job states to your database using Active Record.
所以你的猜想可能是对的。
关于“停机一段时间重启服务之后是否要执行定时任务”这件事,要依任务自身的业务需求决定。比如批量处理用户产生的数据这种任务,由于停机时间是没有数据积累的,那么定时任务也就不用执行。如果业务有一定的时效性要求,在停机恢复之后尽早重跑一次就是值得考虑的。
对于这个应用场景我的意见是用现有框架里提供的 (before_action)[http://guides.rubyonrails.org/action_controller_overview.html] 来解决问题,而不是把其他语言 / 框架里你所熟悉的实现方法照搬过来。除非你有很好的理由。
@sefier 主楼的实现并没有完全还原 PHP die()
的语义,只是用异常做了个 goto
而已。
把超类作为参数传给 Class.new
: http://ruby-doc.org/core-1.9.3/Class.html#method-c-new
举手~ 目测还是 mac 用户多。
如果回复的类型就这么几种,感觉不算多,我倾向于用这个方案:
class Person < Struct.new(:answer_policy)
def respond(words)
answer_policy.new(words).answer
end
end
class LackadaisicalTeenagerAnswerPolicy < Struct.new(:words)
def answer
case
when nothing?
'Fine, Be that way!'
when yell?
'Woah, chill out!'
when question?
'Sure.'
else
'Whatever'
end
end
def nothing?
words.empty?
end
def question?
words.end_with? '?'
end
def yell?
words == words.upcase
end
end
bob = Person.new(LackadaisicalTeenagerAnswerPolicy)
puts bob.respond('meh')
因为经常要保存,已经自己写了 map:
nnoremap <leader>w :update<CR>
把"确认退出系统吗?"这个提问直接删掉更好 - -. 除非当前页面上有需要保存的工作成果,那么提醒一下用户还有点意义。否则这种提示只是在制造操作上的麻烦。
猜测主要还是编辑器的问题。找个保存文件时能选择编码的编辑器,保存时注意选上 utf-8, 和开头的注释里写的 # encoding: utf-8
保持一致。
因为 def 是关键字。irb 在解析这一行输入时以为你还没写完。把 def 这一组 key-value 拿掉就支持了...