【问题标题】:How do I exclude search results in ActiveRecord?如何在 ActiveRecord 中排除搜索结果?
【发布时间】:2014-08-15 22:45:47
【问题描述】:

我正在尝试编写一个 ActiveRecord 查询,它将返回与 current_user 相同的方格中的所有字符和 non_player_characters 的记录,同时从结果中排除 current_user。

class Square
  def self.characters(user)
    characters = []
    players = Character.all
    bots = NonPlayerCharacter.all
    characters << bots.find_by(x_coordinate: user.x_coordinate, y_coordinate: user.y_coordinate)
    characters << players.find_by(x_coordinate: user.x_coordinate, y_coordinate: user.y_coordinate)
  end
end

我阅读了rails guides,它告诉我如何从搜索结果中排除项目,但仅限于单个命令的上下文中。换句话说,读完之后我不知道如何用 find_by 方法链接非条件。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    find_by不返回活动记录关系,使用where可以继续修改:

    players = Character.where(your conditions)
    players = players.where.not(id: user.id)
    # ...
    

    或者,您可以建立一个关系,然后在该关系上调用find_by

    players = Character.where.not(id: user.id)
    players = players.where(some other conditions)
    # ...
    players.find_by(your conditions)
    

    【讨论】:

    • 谢谢,我的问题是 find_by 只返回 1 条记录,而 where 返回所有记录。获取两组记录(不包括用户)并将它们连接起来给了我需要的扁平数组。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多