繁体   English   中英

HABTM查询帮助(Rails 3)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM