• 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 格式了。

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