@
yodhcn 静态类型检测可以给你安全感,也只是安全感而已。但是无论是静态,还是动态,该考虑的事情一个也跑不了。考虑不到,最后还是要手工处理。
而静态会让人更死板,更繁琐。动态就简单,比如我查一个 status_id
@
regulates = @
regulates.where(status_id: params[:status_id])
api 可以传过来一个 int 就是
@
regulates.where(status_id: 1)
也可以直接传一个数组,就是
@
regulates.where(status_id: [1,2,3])
这都是一些基础用法。
如果想连表查询就
```ruby
@
regulates = @
regulates.joins(:business).where("
businesses.name like '%#{@business_name}%'")
```
想连一堆的表,输出 json 就直接
```ruby
@
regulates = @
regulates.as_json({
include: {
market: {only: nil , methods: :area_name } ,
business_owner: {except: :password} ,
submit_serv_user: {only: :username} ,
serv_depart: {methods: :parent_tree_names} ,
} ,
methods: [:status , :regulate_show_status , :alarm_status ,:regulate_times]
})
render json: @
regulates```
inlcude 是关联模型,直接连表查数据。
only 是只查某些字段。
except 是除了某些字段,其他都查出来。
method 是直接调模型的方法,可以用来组合复杂的数据,而不是只查表里的内容。
而且可以 include 的模型再 include ,无限套娃(当然需要动动脑子,考虑一下性能问题)
是不是比其他 ORM 强出几(十)条街?
你真正用了 Rails 就会发现,哪哪都能找出甩其他语言框架几条街特性。
比如你要 post 一个时间到数据库,你可以'2012/12/12' 也可以'2012 12-12' 也可以 '2012/12/12 18:00:00',随便什么样的格式都可以。这种细节数不胜数。
你和别人的表结构同步,就需要麻烦一点写 migration ,但是这相当于把数据库表结构严格做了版本控制了。
而部署上,我目前都不用 docker ,因为 Rails 应用本身就是一键部署的。
1 git 提交代码
2 运行 cap production deploy
3 等待部署结束
Ruby 在中国不火,主要原因是 3 点
1 互联网创业大潮时期,在中国 PHP 太火,挤掉市场份额。
2 然后是平台限定,当时 Windows 下 Ruby 基本没法写,基本都是 Mac ,团队硬件成本投入太高,所以也才有各种仿制品。
3 Ruby 开发效率太高,当你产出是别人几倍拿的还是同样工资,而维护的业务逻辑大量,要把人累死。投资人不懂,只会觉得是理所应当。
所以除了真正打算自己赚钱的创业项目,或者写给自己用的项目,基本很少有用 Ruby 的。
我最早写的是 PHP ,2010 年自己写了一个 PHP 框架,抄袭对象的是某个抄 Rails 的 PHP 框架 QeePHP ,抄他是因为他不维护了。同一时期有大火的 Django 、YII ,Django 压根没考虑数据库表结构版本维护,YII 是比较割裂的,migration 做的很初级。我自己的框架想到了 migration 的思路,但是实在不想去做这些底层的东西,因为我的目标是开发赚钱的应用。后来的 Laravel 基本就是 Rails 的强势 copy ,但是用肯定要用更成熟的原版。
因为 Ruby 是动态语言,所以写 Rails 你应该写一些测试,来保证程序的健康。但是静态语言也应该写测试啊。
你又担心,多人协同开发,写的代码相互看不懂。但有没有想过,Ruby 和 Rails 的效率可能让你根本不需要那么多人?我现在手里项目 56 张表,10 万多行代码,前后端一个人。
而且 Ruby 虽然可以 magic ,但并没有规定你不能用朴素的方式来书写代码。
相反你可以规定,不让自己 /员工用花里胡哨的方法写代码。因为写的 99%代码都是业务,想花哨也花哨不起来,该是 if else 他就得是 if else 。
而事实上我们正常只有 hack 第三方包,和写一些工具类的时候才会用元编程。其他代码都是一板一眼的。
所以,你会发现,为什么 Rails 国内这么小众,但是一提牛逼的框架尤其是 ORM ,都要说 Rails 。因为他就是强啊。
自己研究代码,强烈建议玩玩 Rails 。自己写项目,强烈推荐使用 Rails 。
PS:只用来做后端哦,orm 和 API 。Rails 默认前端那套东西很不成熟。老版本配套的 webpacker ( webpack+周边)倒是可以,我自己用 webpacker 和 vue 整合了一套实践还是很不错的,但是还没有时间能分享出来。
完了,变成安利贴了。逃