bootstrap 不好用,那就试试它的小师弟啊 Ratchet 支持 iOS 和 Android 风格的样式,不过它的目标还是为了模拟原生 UI 风格,如果有比较高的定制需求,请慎重考虑:
BTW,社区大神 @ruby_sky 封装了一个 Ruby Gem。 http://my.oschina.net/u/200705/blog/207753
最直接的方式就是提前做一遍校验:
users = if params[:keyword].present?
User.ransack(name_cont: params[:keyword]).result
else
User.none
end
不确定 ransack 有没有针对空搜索词处理的方案,如果有的话,用它提供的,没有的话,就用我上面的。
(补充:看了下 StackOverflow 上的方案,基本也是自己手工先检查一遍 http://stackoverflow.com/a/22159567/2547108) (再补充: http://stackoverflow.com/questions/32054904/ransack-return-nothing-when-form-submitted-and-no-search-values-entered)
def create_avatar
file = Base64.decode64(params[:avatar]['data:image/png;base64,'.length .. -1]) # 将 Base64 编码的参数用 Base64 解码,得到数据的二进制表示,也就是图片本身的二进制数据
file_name = "img_#{Cattle.rand_string_name(20)}.png" # 声明一个随机的文件名
file_path = "#{Rails.root}/public/uploads/#{file_name}" # 确定文件保存路径
File.open(file_path,'wb+') do |item| # 跟聚文件路径创建新文件
item.write(file) # 将前面的二进制数据写到文件里,这个时候的文件就是一个完整的图片文件了
end
current_user.avatar = Cattle.upload_yun(file_name,file_path) # 将前面的图片文件与用户记录关联。
end
代码并不复杂,图片本身就是一个二进制数据的文件而已。上面代码并不是你说的如何存 base64,它是先解码 base64,保存解码后的二进制数据。
@lyfi2003 好的!
用 carrierwave 保存以及简单校验下用户上传的文件,因为图片上传这一块你到时会遇到很多安全问题。你可以看看 Web Application Security Guide/File upload vulnerabilities ,自己写的话你的代码肯定不少。carrierwave 本身支持扩展名校验,不过这个是可以校验的,可以加上 carrierwave-bombshelter ,后者会从文件头里读取图片信息,是更加安全的做法。
这一步你自己实现就没什么好说的了,自己写个 job 异步上传到云存储就好了。
如果你们自己的云存储支持客户端文件直传的话,可以考虑 #2 楼 @tony612 说的方案,服务器为客户端发放上传凭证,客户端把上传后得到的 url(或者其他元数据,比如 host、bucket 等)交给服务器端存下来就好了。这种比较直观,也比较省时省力。
已经默默改回 rubygems,维护者加油!
#13 楼 @autumnwolf 如果喜欢偷懒的话,建议可以在 ~/.bashrc
里边加入下面这一行:
export RAILS_ENV=staging
这样以后每次登录就能自动设置系统环境变量了,也就不需要每次敲命令前都需要在前面输入 RAILS_ENV
了。
#6 楼 @autumnwolf 是因为你 bundle 的时候已经指定 bundle install --deployment --without development test
所以你的 bundler 不会安装 passenger 这些在 development
以及 test
组下边的 gem,但是你执行 migration 的时候没有环境变量的话,rake 默认用 development
模式启动应用,这个时候 bundler 根据 Gemfile
里的声明,尝试加载 development
组里的 gem,但是发现根本找不到,所以出错。
#6 楼 @autumnwolf 你是不是忘了加上环境变量 RAILS_ENV=staging rake db:migrate
瞄了一眼语法,好亲切
过来帮顶!从楼主平时的推来分析的话,这是一个不错的团队
rubinius ???
#22 楼 @tony612 感觉这种就是 sharding 的事情了,如果自己用 establish_connection
去切来切去比较麻烦,可以考虑看下 octopus。如果是针对整个 controller action 去做数据库选择,可以看这个 https://github.com/thiagopradi/octopus#rails-controllers
原来就感觉 gitcafe 不是很给力
微信支付内部是不同团队做不同模块,so,你会发现各种不统一。anyway,这是基于一年前我了解到的内部的情况,现在不好说。
重新 push 就行了,确保你先更新 gemspec 里边的版本号