【问题标题】:Rails join single record to scopeRails 将单个记录加入范围
【发布时间】:2018-12-05 12:15:43
【问题描述】:

假设有一个模型称为 Comments。不,我们这样做@comments = Comment.where(name: 'John')。接下来我们做comment = Comment.find_or_create_by(...)。 Rails 中有没有办法将comment 加入@comments?对于数组我可以做 @comments << comment 但我想要 activeRecords...

@comments.inspect 返回"#<ActiveRecord::Relation []>"

我正在使用 Rails 5.1.3

谢谢,安德烈亚斯

【问题讨论】:

  • 你不是说@comments.inspect返回"#<ActiveRecord::Relation []>"吗?
  • 你是对的,谢谢。已更新。

标签: ruby-on-rails activerecord scope


【解决方案1】:

@comments 将是Comment 实例的数组。 comment 将是 Comment 的一个实例。因此,@comments << comment 没有错,它会达到你想要的结果。

【讨论】:

    【解决方案2】:

    你应该在询问之前尝试!

    Active Record 关系拥有数组可用的所有方法,因此您需要做的就是:

    @comments << comment
    

    @comments.push(comment)
    

    编辑:已尝试上述方法,似乎对我有用,但是另一种解决方案:

    ids = @comments.collect(&:id)
    @comments = Comment.where(id: (ids + comment.id))
    

    这将从@cmets 中的每条记录中获取ID,然后将它们添加到其他评论的ID,然后返回具有该范围内ID的所有cmets

    【讨论】:

    • 当然,在我问之前我确实尝试过。当我使用 '
    • 我刚刚在控制台中完成了这个,它可以工作,你使用的是什么版本的 ruby​​?
    • @comments.inspect 返回什么?
    • 添加了另一种解决方法,但正如@Andy 指出的那样,您的 cmets 实例变量可能不是您认为的那样
    • 使用上面的方案会@cmets
    【解决方案3】:

    是的,你可以这样做 如果您想要活动记录格式的数据。

    Comment.where(conditions).or(Comment.where(id: 1))
    

    所有解决方案的其余部分都是复杂的或以数组形式提供数据。

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多