@5swords present?
和try
都是 Rails 里面的,你却拿来给 Ruby 打补丁,这都是哪跟哪啊。
另外 try 最好也不要滥用。像这种Post.where("id = ?",1).first.try(:title)
在实际中根本用不着。
为什么?如果你是显示 Post 页面,id = 1 的 post 根本就不存在,你也就去不了那个页面,就不存在 try 这 try 那的问题来。
如果你是显示一个 collection, 比如 Post.last(5)。id = 1 的 post 根本就不在这个 collection 当中,更没有必要 try。
@hz_qiuyuanxin 客气了 :)
没区别。我比较喜欢第一种写法,因为通常别的 validations 还需要别的项目,这样好几个 validates 就可以排列得好看一点。
第一,你的 API Project.current
和楼主的current_company.projects
没有本质的区别,都是要手动加 current 这个 scope。并没有提供任何便利。
第二,凡是带两个@@的都可能是有气味的。尤其你的 class variable 竟然直接设到 ActiveRecord::Base 更是设计的大忌。我不确定这种设置要是同时几个用户访问,他们会不会得到同样的 comapny_id :)
你这是标准的 multi tinency,的确有更好的方案。要是都这么手动加 scope 会累死的。
关键点:
Model 里面加default_scope
。映射到 current_tenent.
ApplicationController 里面保证有 tenant,并且要写到一个除 controller 之外的地方,不然 model 用不了。
一定一定要保证 Thread safty。
可以看看这些参考: https://github.com/influitive/apartment https://github.com/ErwinM/acts_as_tenant http://railscasts.com/episodes/388-multitenancy-with-scopes?view=asciicast (纯手工,无 gem)
@jasl 这么烂你还贡献。我想说...你真能忍啊。
@cassiuschen 你做 web app 的 api 时没有任何问题啊,还是可以用 cookie。做 mobile app 我不太熟,但应该可以用 token 或者也可以用 cookie,还是不需要直接的 id。
如果实在避免不了在表单里用 user_id,你也可以在 controller 里面验证的。if params[:user_id] == current_user.id
不过这种代码就难看一点。
@cassiuschen 在表单里填 current_user id 是错误的做法。正确的做法是不要 user.id, 而直接在 controller 里面取 current_user
"可这在浏览器端很容易就可以吧表单信息修改掉,从而取得别的用户的授权" -- 除非截获 http 请求或者直接拿到其他用户的 cookie,否则你能很容易就改成其他用户?
要真是用户的请求被截获或 cookie 泄漏,这也不是网站能够解决的问题。
这个要看场景,很多时候报错优于沉默。
比如作者引用的find_by_id
。在大多数场景下,特别是 controller 中,应该用find
来期待报错而不是find_by_id
,然后rescue ActiveRecord::RecordNotFound
。
有时候沉默会比较好,比如处理复杂的 hash 的时候。
goodreads.com
用笔记本的话就拔下网线,用手机热点上网装 gem,搞定。 最后连上网线,拿手机话费发票找老板报销。
500 就很好啦。按钮是让你点的,不是让你开新页面的。不按常理的用户需要给予防范,不需要给予友好处理。
刚查了 Ubuntu 最新的 package 都只有 1.0.1f,4 月 7 号出的,还说明了是应付这个问题的。http://www.ubuntu.com/usn/usn-2165-1/ 怎么破?
单层 RESTful 路由的 index, create, new 是不需要路径参数的,所以你提供的参数变成了 format。
如果直接拿 product 做参数,你需要product/123/line_items
这样的路由
resources :products do
resources :line_times
end
嵌套路由在这里是非常合适的。
如果你实在不喜欢嵌套的,而喜欢直接line_items
。那你需要在发送 POST 参数时手动提供 product_id,不然 controller 没法知道这个 line_item 属于谁。这样会麻烦一些。
@pynix 如果没有 submit button 话,按常理很难想到你只接受 enter。这不友好。但这里的确不需要 submit button,输入即得最直观,也可以展示框架的功能。
搜索文件名。可以用 CtrlP 插件,会自动探测项目的根目录,比如说有.git
,然后 Ctrl+p 一键,好吧,是两键,随意搜索文件名,回车跳转,二十分方便。还有其他键可以查看最近文件,buffer 文件。必备利器。
在文件目录下搜索字符。这个我不常用,用的时候是用 NERDTree 再加 Ack 插件。跳到 NERDTree, 选中目录,按 s, 再输入要搜的东西。不限定于 Rails 根目录。
还有一个 Rails.vim,随意在代码文件,测试文件和 View 之间跳转,如果是常规 Rails 项目是非常方便。我最近做的以 API 为主,嫌这个插件略为占用资源,禁用了。
@tyaccp_guojian 多谢邀请!不过我不在北京,参加不了了 :)
这个和 ember 没有任何关系,完全在于你自己对输入事件的处理。别的框架,jQuery,vanilla Javascript 都一样。
我觉得 ember 官网对这个具体细节的处理是欠完美的,不过就像@Rei说的,反正是别家的网站,不在乎 :)
我觉得完美一点可以这么做:
输入字符时有函数负责处理,提示已输入的字符,及提示正在输入,不发送对外请求。
以上函数同时检查是否 valid email,如果是,发送请求。处理请求并加上或更新图片。
VPS 都觉得贵就不要用 Rails 开发了,或者干脆都不要定制开发了。随便用个什么现成的东西他自己折腾去。
你现在有空帮他免费做,谁来帮他维护?有临时小需求谁来帮他做(还不说大的改动了)?维护的工钱分分钟都超过 VPS 价格。没有这个心理准备干脆开始就不要动为好。
人生宝贵,没必要把时间浪费在不靠谱的事情上。朋友的想法不靠谱,你了解情况的话有责任提醒他。
砸破?摔破?
很漂亮。建议把效果包分开可能会比较好,目前 min.css 一百多 K 感觉有点大。需要哪个就加哪个,毕竟一个项目里面最多也就用一两组效果。
str.match(/font-family:([\w|\s|-]+)/)[1].strip
@waitingaminute 理解,同情。
这种乱糟糟的数据真是不忍卒睹。不要图快图省事,wordpress style 不可取。
长久的办法是把数据和样式分开。内容是内容,样式是样式,两者完全不是一种东西。你可以在内容中允许一些简单的 semantic html, 比如<strong>
, <em>
,但仅此而已,如果用其他的 parser 比如 markdown,bbcode 更好。
如果你在这种现有的数据上修修补补,就是在给自己累积麻烦。不合适的设计最终会咬伤你的。
试试 Turbolinks.visit(window.location)
$('#notice').fadeOut(5000)
Can't be simpler than that.