Ruby on Rail - 检查我的病情是否存在至少2条记录

时间:2016-04-30 16:29:40

标签: ruby-on-rails ruby conditional-statements

在我的应用程序中,如果存在具有相同条件的2条记录,我想显示db记录

检查它的最有效方法是什么?

这是我的代码:

- if @users.where(friend_group: 0).where(city_id: 2).any?
  - @users.where(user_group: 0).where(city_id: 2).each do |user|
    %p= user.name
    %p= user.city.name

而不是any?,我想检查当 2条记录存在相同条件时,它是否可以显示它们。

我试过- if @users.where(friend_group: 0).where(city_id: 2).exist?(2),没有运气。

ps:我使用的是rails 4.2

2 个答案:

答案 0 :(得分:2)

通常,您应避免在视图中进行数据库查询 - 更好的解决方案是在控制器或模型中执行此操作:

class User < ActiveRecord::Base
  # ...
  def self.by_group_and_city(friend_group, city, threshold: 2)
    scope = User.where(friend_group: friend_group, city: city)
    # if you want only if exactly two records match then use ==
    scope.size >= threshold ? scope : User.none
  end
end

如果没有匹配的记录,我们返回User.none而不是nil - 这样你就可以安全地在空关系对象上调用像.each这样的方法。

- User.by_group_and_city(0, 2).each do |u|
  %p= user.name
  %p= user.city.name

更好的是让控制器进行查询:

def index
  @nearby_users = User.by_group_and_city(0, 2)
  # ...
end
- @nearby_users.each do |u|
  %p= user.name
  %p= user.city.name

答案 1 :(得分:0)

只需使用有效记录关系&#39; #count和范围索引,如下所示:

- rela = @users.where(friend_group: 0).where(city_id: 2)
- if rela.count > 1
  - rela[0..1].each do |user|
    %p= user.name
    %p= user.city.name