• Petri Net workflow for Rails at February 12, 2020

    炮哥出品,必属精品,这就是我前年的工作流的全新版本啦 🎉

  • 苹果 2016 新设计的那个钢板键盘有设计缺陷,所以使用这设计的(就是 2016-2019 的 mbp)键盘保修期延长到四年且免费更换

  • 成为 MiBoy 啊!一百多就够了吧...反正机械键盘几乎都是 Cherry 轴 Cherry G3000 500 左右(傻大笨) Mac 布局的 Matias 也差不多 700 多

  • 消耗品该磨损就磨损吧(毕竟还能顺道换 C 壳和电池),在书桌上用可以买个键盘用

  • 华顺应该没续那个域名 我看看能否拿掉那一条

  • APM 监控有钱上 NewRelic,没钱自建 ELK

    自动化运维机器不多各台机器单独配 Monit 就好,部署 capstrano,老玩具还马马虎虎能用。

    机器比较多的话,现代话的做法还是上容器了

  • (我不会用,但你得有,逃~

  • 好像只能用在 select 上,Insert Delete Update 调用链最后不是 AR 的 Query 了,没法调 to_sql

  • 这年头有多少个 XXEnv? at December 26, 2019

    说来 rvm 可以说是 shell 工程的集大成者了。。。印象里好像是上万行的 sh 了这可是非常恐怖的。。。

  • Ruby 2.7.0 Released at December 26, 2019

    如果重新升级桩文件还有问题,用 bundle exec 来执行命令目前测试是不会出现问题的

    我升级我自己维护的 gem 的时候发现一些别的问题, bundle exec 可以解决

  • Ruby 2.7.0 Released at December 26, 2019

    Rails 还没有发正式的适配 2.7 版本,虽然不会有什么问题,但是会多一些 warning 看着烦,问题比较大的地方在 bundler 2.1.2,如果遇到问题可以试试重新生成一下 bundle 的桩文件 bundle binstubs bundler

  • 试试能不能打印 pwd 就是当前目录 或者更土的办法,用 Windows 的搜索 去搜你存的那个文件名

  • ruby 做强类型 DSL 的问题 at December 24, 2019

    两种方法:

    1. 用 Sorbet 加类型标注,未来就是 Ruby 默认集成的组件了
    2. https://github.com/egonSchiele/contracts.ruby 这个有知名项目在用
  • 666

  • GitHub 国内啥时候开始招人呀... 只能靠 GH 加入我软了😂

  • Bootstrap 还没支持 😂 实现良好比较麻烦,等 Bootstrap 5 吧

  • 置顶啦

  • 可以 我也来打广告 https://github.com/rails-engine 😂

  • 哦...那破案了...这个写法 5.1 才有的... https://github.com/rails/rails/commit/e86524c0c5a26ceec92895c830d1355ae47a7034

    遗留项目用 https://github.com/rails/rails/issues/9454#issuecomment-310821406 这种写法,RoleCore 应该整体还是兼容 5.0 的

    新项目直接上 6.0 吧,或者至少 5.1 以上

  • 那我晚上到家 起一个裸的试试...不过我自己不用 cancancan 也,理论上也跟他无关

  • ➜  role_core git:(master) rails c
    Loading development environment (Rails 6.0.0)
    [1] pry(main)> pa = {"utf8"=>"✓", "authenticity_token"=>"w0o9CGy+oR9bqZaPpmglcNnKrzRS+e7/LFTZOPePAOWrHHwbuMABqzolmhB3u0vVUSRSPqs77BwKHKU8iObC+Q==", "role"=>{"name"=>"j", "permissions_attributes"=>{"task"=>{"create"=>"1", "destroy"=>"0", "update"=>"0", "update_my_own"=>"1", "destroy_my_own"=>"1"}, "production"=>{"create"=>"1", "destroy"=>"0", "accept"=>"0", "read"=>"1", "read_public"=>"0"}, "topic"=>{"create"=>"1", "destroy"=>"1", "accept"=>"1"}}}, "commit"=>"Update Role", "id"=>"7"}
    => {"utf8"=>"✓",
    "authenticity_token"=>"w0o9CGy+oR9bqZaPpmglcNnKrzRS+e7/LFTZOPePAOWrHHwbuMABqzolmhB3u0vVUSRSPqs77BwKHKU8iObC+Q==",
     "role"=>
      {"name"=>"j",
       "permissions_attributes"=>
        {"task"=>{"create"=>"1", "destroy"=>"0", "update"=>"0", "update_my_own"=>"1", "destroy_my_own"=>"1"},
         "production"=>{"create"=>"1", "destroy"=>"0", "accept"=>"0", "read"=>"1", "read_public"=>"0"},
         "topic"=>{"create"=>"1", "destroy"=>"1", "accept"=>"1"}}},
     "commit"=>"Update Role",
     "id"=>"7"}
    
    [2] pry(main)> params = ActionController::Parameters.new(pa)
    => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"w0o9CGy+oR9bqZaPpmglcNnKrzRS+e7/LFTZOPePAOWrHHwbuMABqzolmhB3u0vVUSRSPqs77BwKHKU8iObC+Q==", "role"=>{"name"=>"j", "permissions_attributes"=>{"task"=>{"create"=>"1", "destroy"=>"0", "update"=>"0", "update_my_own"=>"1", "destroy_my_own"=>"1"}, "production"=>{"create"=>"1", "destroy"=>"0", "accept"=>"0", "read"=>"1", "read_public"=>"0"}, "topic"=>{"create"=>"1", "destroy"=>"1", "accept"=>"1"}}}, "commit"=>"Update Role", "id"=>"7"} permitted: false>
    
    [3] pry(main)> params.require(:role).permit(:name, permissions_attributes: {})
    => <ActionController::Parameters {"name"=>"j", "permissions_attributes"=><ActionController::Parameters {"task"=><ActionController::Parameters {"create"=>"1", "destroy"=>"0", "update"=>"0", "update_my_own"=>"1", "destroy_my_own"=>"1"} permitted: true>, "production"=><ActionController::Parameters {"create"=>"1", "destroy"=>"0", "accept"=>"0", "read"=>"1", "read_public"=>"0"} permitted: true>, "topic"=><ActionController::Parameters {"create"=>"1", "destroy"=>"1", "accept"=>"1"} permitted: true>} permitted: true>} permitted: true>
    
    [4] pry(main)> params.require(:role).permit(:name, permissions_attributes: {}).to_h
    => {"name"=>"j",
     "permissions_attributes"=>
      {"task"=>{"create"=>"1", "destroy"=>"0", "update"=>"0", "update_my_own"=>"1", "destroy_my_own"=>"1"},
       "production"=>{"create"=>"1", "destroy"=>"0", "accept"=>"0", "read"=>"1", "read_public"=>"0"},
       "topic"=>{"create"=>"1", "destroy"=>"1", "accept"=>"1"}}}
    
    [5] pry(main)> Role.new(params.require(:role).permit(:name, permissions_attributes: {}))
       (0.8ms)  SELECT sqlite_version(*)
    => #<Role:0x0000564b77c637e8
     id: nil,
     name: "j",
     permissions:
      #<Global:OptionsModel {:foo=>false, :bar=>false, :project=>{:create=>true, :destroy=>false, :update=>false, :read=>true, :read_public=>false, :task=>{:create=>true, :destroy=>false, :update=>false, :update_my_own=>true, :destroy_my_own=>true}}, :task=>{:read=>false, :create=>true, :destroy=>false, :update=>false}}>,
     type: "Role",
     created_at: nil,
     updated_at: nil>
    

    我在控制台根据你提供的日志模拟过滤请求的动作,还是复现不出来

    你的 Ruby 和 Rails 版本是多少呢?我应该在 5.2 和 6.0 都验证过的,你那边用我的 Dummy app 有问题么?

  • 这个帖子一直没有更新,虽然基本都没有变(大体只改了名字)不过可以看下 https://github.com/rails-engine/role_core 我忘记是不是有更新了,这 gem 我自己也在用,所以你提的这个问题有点奇怪

  • 贴一下你 控制器 action 的代码?

    params.require(:role).permit(:name, permissions_attributes: {}) 这样 accepts_nested_attributes 的写法是 Rails 的标准做法

    https://guides.rubyonrails.org/action_controller_overview.html#permitted-scalar-values

    之前没人提过这个问题也,我不太觉得这里能有问题

  • 好像是我正贴的网址错了... 后来听了华顺的建议 重构并放到 https://github.com/rails-engine/role_core 去了... 你试试...

  • 我那个 Git 的 dummy 应用么?

    Unpermitted parameters: task, production, topic 问题出在这了,我看看

  • 就这样写,这样写的意思是允许 permissions_attributes 里的任何内容,这个跟请求传入的数据的结构是一样的

  • 支持!

  • 你公司是为了赖掉裁员的赔偿金,可以去仲裁,就算公司进一步耍流氓拒不支付也算埋了个雷。

    其实直接裁员也是违规的,不过既然摊牌了,就算依法公司也会变着法让你难受,有合适的赔偿也不一定是坏事。

  • 对事不对人,把好赖摊开了给楼主讲明白,剩下怎么做就看楼主自己的想法了

  • 没用过