我有以下型号:
#user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
#group.rb
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end
#join table migration
class CreateGroupUserJoinTable < ActiveRecord::Migration
def self.up
create_table :groups_users, :id => false do |t|
t.integer :user_id
t.integer :group_id
end
end
def self.down
drop_table :groups_users
end
end
我需要进行以下查询:
@group = Group.find(:all, :include => users, :conditions => ["users count < ?", group_size]).first
但是这给了我以下错误:
SQLite3::SQLException: near "count": syntax error: SELECT "groups".* FROM "groups" WHERE (users count < 2) LIMIT 1
我也试过这个:
@group = Group.where("users count < ?", group_size).first
但我得到同样的错误。我做错了什么?
答案 0 :(得分:1)
Group.select("groups.*, count(users.id) AS user_count").joins(:users).group("groups.id").having(["count(users.id) < ?", group_size])
我认为这可能会为你做到......
答案 1 :(得分:0)
users.count就是您所需要的 - 请注意您留下了空间。您收到语法错误,而不是一些奇怪的错误。
@group = Group.find(:all,
:include => users,
:conditions => ["users.count < ?", group_size]).first
现在,如果您真的只想要第一个条目,那么您应该这样做:
@group = Group.first(:include => users,
:conditions => ["users.count < ?", group_size])
请注意,我正在呼叫#first
,而不是#find
。很快就会弃用#find
- 请改为使用#all
和#first
。