• 直接怼个 React Component 的确很方便,这也是 Pure React 的优点之一,也降低了新手学习成本。但是 React 的真正威力难道不是要搭配着所谓 React 生态一起使用才能发挥出来吗?拿 Rails 来说,在某些局部使用 React 不是不可以,但如果只在某个局部使用就有点为了 React 而 React 的意思了,如果其他地方还在用着 turbolinks + stimulus 就更不伦不类了,turbolinks + stimulus 本身就已经是非常好的解决方案了。真正的差别,我认为是 React 或者 Vue 所代表的现代前端的思维方式,这个跟 stimulus 是本质上不同的,如果你认同,就应该整体切换到大前端思路,反之,就可以直接 Rails 全家桶,而不太适合混着用。

  • 上传到 aliyun 的时候该如何自动设置文件的 header 呢?

  • 我跟你一样。。。

  • 膜拜,感谢华顺大佬的贡献

  • 嗯。。。试了几个不同的单词单复数,的确是我搞错了 😂

  • 👍

  • 关系和官网例子一样,我在原文补齐了

  • Get👍

  • 关联关系是唯一的 指的是...(好吧我表述不清)

    user_1 可以有 topic_1,topic_2,topic_3,但不能有两个 topic_1,反之亦然:

    validates :user_id, uniqueness: { scope: :topic_id }
    
  • 没错,关键就在于『把中间表作为查询的主表』,在视图中循环中间表实例。

    也因此,只要循环的是 topics 就避免不了这个问题,循环中 topic.topic_users 获取到的中间表 collection 也和 @user 没什么关系。

  • usertopic 是多对多的关系,不能 has_one :user

  • 不明白,大佬再解释一下呗~

  • 原理上一样的,关键是循环中间表实例。

    但,的确,你是对的,我少想一步,TopicUser.where(user_id: @user.id) 就等于是 @user.topic_users,放着现有 api 不用,脑子卡壳了。而且这里用不着再取 topic_id: topic_ids,直接 includes(:topic) 就行了。

    更新了原文,多谢纠正!

  • 哦~有道理,学到了!

  • 第一个问题不是判断存在,是要等覆盖的元素消失了才 click。

    第二个问题我放弃了 😂 ,找到了这个 issue

    第三个问题你说的对的,我之前可能没搞对,用 have_no_content 和 have_content 就可以了。

  • 最近也在启用 Capybara,看了你的帖子受益匪浅,非常实用!

    有几个问题请教一下:

    1. 我有个延迟消失的元素,必须等他消失之后才能 click 被他覆盖的元素。这里的等待如果不用 sleep 还有更好的方式吗?
    2. 还是元素覆盖的问题,我有个全屏覆盖的元素,意图是按任何一个点都能优先触发这个效果,比如侧边栏的弹回,这时候如果测试 click 一个按钮,效果应该是触发侧边栏的弹回,但结果是报错元素覆盖,按不到按钮。但如果直接去 find 那个全屏元素 click 就不符合这个测试意图了。这个该如何解决呢?
    3. 有个文字被包含在一个 display: none 的模块里,效果是希望点击按钮后通过 JS 显示,但是用 have_content 去查的话这个文字是一直存在的。这个该如何验证?
  • 我明白了,在第一次新建模型 create 的时候 rawValue 获取到的是用户 input 输入,是 String。保存之后变成 Date 或者 DateTime,此时如果再去验证这个用户实例,获取到的 rawValue 就是保存后的 Date 或者 DateTime 格式了。

    的确是验证器逻辑有问题,感谢建议!

  • ActionCable 编译报错 at 2020年01月14日

    用了 react 。。。

    还真是,注释掉这一段就不报错了,多谢赐教!

    知道原因吗?

  • ActionCable 编译报错 at 2020年01月13日

    完全没有头绪。同一套代码,开发环境是好的,编译后的就报错。页面一加载就看到 console 报错了,还没有触发广播的。也不知道是不是 js 编译的过程哪里有问题,但我用的都是 Rails 的默认组件。

  • ActionCable 编译报错 at 2020年01月13日

    配了,生产环境的有启动 redis 的 container,并且加了环境变量 REDIS_URL=redis://redis:6379/1

  • ActionCable 编译报错 at 2020年01月13日

    cable.yml

    development:
      adapter: async
    
    test:
      adapter: test
    
    production:
      adapter: redis
      url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
      channel_prefix: app_production
    
  • 看过你的帖子 👍 因为主要是在介绍原因和两种不同方法,并且 docker-sync 的安装也有不同(不需要 brew install 依赖),所以我就新起一篇专门介绍 docker-sync 的

    这个 issue 没有深入了解,但对普通的 Docker 开发环境来说,用 docker-sync 已经完全没问题啦

  • rails 6 webpacker 慢的要死 at 2019年08月05日

    Mac 的确背了锅,因为文件系统不同。Docer for Mac 用的是 osxfs 共享文件系统,osxfs 在做 Mac 到 Linux 的文件同步的时候因为文件系统的各种差异导致速度非常慢(这也是为什么在 Linux 上跑 docker 速度就快很多的原因),具体详见官方介绍。简单来说,docker-sync 就是通过一系列手段(主要是 Unison)优化了 Mac 的 fs 到 Linux 的 fs 的文件同步。docker-sync 的使用还是比较简单的,安装 gem,配置 yml,然后 docker-sync start 就可以了,建议 Mac 用户们直接拿来用。(个人看法,欢迎指正)

  • rails 6 webpacker 慢的要死 at 2019年08月03日

    我也是这样,正在尝试 docker-sync

  • 啊~ 我之前看过 plugin,只是大概了解它的意思。这次在引用 Vue 的时候出了问题,没想到官方文档给出了方法,原来语法是这样的:Vue: ['vue/dist/vue.esm.js', 'default'],仔细读了下终于明白了