在我的应用程序中,如果存在具有相同条件的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
答案 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