• 通过命令导出你在 database.yml 中设置的数据库的表结构,再生成一个可以生成这个表结构的总 migration。

    作用的话可以加快你初始化数据库的过程。你挨个跑 migration 的话,除了 create_table 中间会有项目开发中的 rename,remove,add 等操作,而 schema 是直接把这些操作的结果汇总起来。

    另外如果您把 schema 纳入了版本控制,那么 diff 一下你就可以知道自己在本地对数据库进行了哪些 migrate 操作。

    schema 和 migration 的顺序完全没有关系。有个细节,就是如果你有使用外键约束,那么 add_foreign_key 会在 schema 的最后,防止你创建约束的时候,这个列还没有被生成。你可以看看代码,它是直接通过数据库 dump 命令跑出来的。

    mysql

    def structure_dump(filename)
      args = prepare_command_options
      args.concat(["--result-file", "#{filename}"])
      args.concat(["--no-data"])
      args.concat(["--routines"])
      args.concat(["#{configuration['database']}"])
    
      run_cmd('mysqldump', args, 'dumping')
    end
    

    pg

    def structure_dump(filename)
      set_psql_env
    
      search_path = case ActiveRecord::Base.dump_schemas
      when :schema_search_path
        configuration['schema_search_path']
      when :all
        nil
      when String
        ActiveRecord::Base.dump_schemas
      end
    
      args = ['-s', '-x', '-O', '-f', filename]
      unless search_path.blank?
        args += search_path.split(',').map do |part|
          "--schema=#{part.strip}"
        end
      end
      args << configuration['database']
      run_cmd('pg_dump', args, 'dumping')
      File.open(filename, "a") { |f| f << "SET search_path TO #{connection.schema_search_path};\n\n" }
    end
    
  • http://ruby-doc.org 建议买本《ruby 元编程》看一看

  • 有可能有人自己用 SQL 创建了一张表,或者还没有把新建 migration 提交上来,造成了 schema 和 migrate 不同步的问题。

  • 哭了,装 x 失败的典型反例。你不要老是一知半解就出来秀啊,碰到比你更懂的人不是分分钟就被打脸了吗?

  • 达到 TIOBE 前三可不不容易,要有非常难得的历史机遇才可以的。Ruby 不过是借着 Rails 和 Web 开发的大势小火了一把,能够有现在的排名已经不错了,怎么可能进前三。

  • 你这个解释不错,不光摘掉了我给你扣上的道德绑架的帽子,还能够把自己的境界上升到抑恶扬善这种级别。

    这个点不错,完美防御,在下撤退。

  • 事情不完全是你想的这样,你有点偏激了。

    在 ruby 社区并不是说不能说 ruby 坏话,而是很多来黑 ruby 的人黑的没有道理,情绪大于理智,所以大家就站出来纠正一下。

    要是 ruby 社区真的是你想的那样,自卑不容质疑,也不会又这么多人给你点赞。

    据我所知,在 ruby 圈有影响力的人,都会好几门语言。很多都不仅仅是程序员,同时是管理者或者创业者。

    大家心态是开放的,不会只抱着 ruby 不放,还会考虑工程甚至是商务上的事情。

    至于偏爱肯定是有一点,像 ruby 这样的小众语言,如果不是因为喜欢,那么你又为什么要选择它?

    我们喜欢 ruby 的优雅,但是不会上升到信仰这个级别。

    你之前的回复我也点赞了,主要是为了提醒自己不要固步自封,多了解一些别的东西。

    全栈营的事情,社区也讨论过好几次,主要的声音都是批评的。

    说到底,我个人觉得。ruby 圈的人,并没有义务贡献出自己的时间,站出来声讨全栈营。

    这都是个人自由,不能上升到道德绑架的层面,你说是吧?

  • 哈哈,队长来个数据库专场来给我们科普一下吧。

  • 值得学习是肯定的,其实光是过一遍 guides 花不了多少时间。作为曾经 github 上 star 数量最多地项目,难道你就没有兴趣来了解一下它的设计吗?

  • 哈哈,我又来水了。

    碰到不开心的事嘛,喝点小酒,或者心里暗骂对方几声傻 x 就好。

    别人只是态度不好,也没有对你造成严重的损失。目前只有你是被“态度不好”的当事人,其他人是没办法产生共情的。所以你就算了,留着这贴,可能会被人 diss。还有可能会有长者,出来教你一些人生的经验。

  • 楼主是清华学霸?

  • 笑而不语 at 2017年11月11日

    我来给配点文字

  • 实在要用就在 application_controller 下给 skip_before_action 一个别名。

  • Emacs 闲谈 (一) 引言 at 2017年11月08日

    哈哈。握手。

    我看到其他同事用 tmux 也是分割好几个面板,我到现在也还是不喜欢这种用法,依旧一个 window 一个 pane。

  • Emacs 闲谈 (一) 引言 at 2017年11月08日

    自己写插件是不是还得学 emacs lisp

  • ruby 缺乏很多机器学习裤

    穿上可以有特异功能?

  • 前端工程里面看起来像 html 的代码其实是一个模版,会通过 js 渲染出真正的 html 代码,还可以在模版里通过指令来调用框架的一些接口。所以逻辑上讲 js 代码和模版是强耦合的,没必要分开。Vue 的文件那种格式相当于一种语法糖,最终还是编译成纯 js 再进行渲染的。

  • 最好就是不要用 default_scope,如果非要用的话,可以试试这样,但也不是很好。

    belongs_to :imageable, -> { unscope(:where) }, polymorphic: true
    
  • 不是很推荐这么做,就像楼上说的,会导致 includes 无效等杂七杂八的问题。

    这个本来的 imageable 方法不是单纯地查找并生成一个关联对象这么简单。而是先通过一个中间对象 ActiveRecord::Associations::BelongsToAssociation 判断下对象是否已经缓存,没有的话再 reset_scope、reload。你通过覆盖这个方法,使原本 ar 设计好的一些东西失效了,得不偿失。而且你本来只是想使 Product 的 default_scope 失效,这样一来,所有 imageable 找出来的 model 全部的 default_scope 都失效了。

  • 心疼自己,Ruby 程序员-1 at 2017年10月26日

    原因嘛,就算你问了,可能别人也不会告诉你真实的原因,除非你碰到那种很好的面试官。以前我面过几个还不错的人,我和老大说很厉害,至少比我强吧。其中有一个我们老大说,这人履历和技术都很厉害,我们的项目养不起。另外一个我们领导说,这人看上去比较浮躁,怕不稳定。还有两个因为项目技术方案的调整,本来需要的岗位又不确定了,所以就没有发 offer。这些种种原因当然都不可能放在台面上来说,所以你真不需要多想。

    你这么年轻,真的啥都不用担心,借用某大佬的话,下海干活、会所名模,哈哈哈哈。

  • 心疼自己,Ruby 程序员-1 at 2017年10月26日

    没事的,兄弟。

    如果非要既写 ruby 又要进大厂,那可能除了大疆之外选择真的不多。

    你现在可能是要去其他大厂写 C++ 了,想想这未必不是一件好事。

    重要的是你在整个职业生涯里的选择和努力,这种一时的面试成与败放在几年这种时间纬度上来看根本不值一提,哈哈。

    PS: 据我的观察,rei 自从加入大疆之后,经常半夜两三点钟发帖。😎

  • 我也很好奇,scope 只是定义了一个查询方法,并不会作为默认查询条件,你是怎么查才导致查出 published 的 product。

  • js、python、ruby 果然还是最受欢迎的

  • 你还是 too simple,sometimes naive。量子纠缠通讯和墙一样,可都是老大哥手下的产品。

  • 已向宇宙发射坐标,我是执剑人。噢,完蛋了,信号被墙截获没有发出去,没想到墙已经如此强大。

  • 好的创业和好的软件一样,都是一个优秀的实践而不是一个模型。不是被设计出来的,而是不断调整出来的。所以就像道理学再多,也还是过不好人生一样,因为人生是具体的。

    你在创业的过程中一定会遇到很多困难,以及和你预想当中不一样的地方,你是如何思考并解决这些问题的。这些具体的经验,走过的弯路,才是对我们来说最有用的东西。

    来讲讲吧。

  • This week in Rails at 2017年09月29日

    订阅了,好像和 ruby-weekly 不一样,只是 rails 项目的一周更新内容,没有附加的东西。

    我看你朋友圈一直在写 Go 啊,还在关注 Rails 吗?

  • 我们是一家专注于帮助普通人获得成功的公司。

    很好奇,如何才能帮助普通人获得成功?成不成功不是都只能靠别人自己,你们怎么帮?

  • 呃,这个不是开源项目。开源的应该有吧,只是我暂时没看到。

  • 没用过 active_admin,不知道怎么集成。

    自己写的话一般是建立 role 和 feature 两个表,进入 action 之前校验一下权限,或者干脆写一个 rack 中间件。