[英]Help with HABTM query (Rails 3)
我有以下型号:
#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
但是我得到了同样的错误。 我究竟做错了什么?
Group.select("groups.*, count(users.id) AS user_count").joins(:users).group("groups.id").having(["count(users.id) < ?", group_size])
我想这可能会帮你...
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
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.