我正在开发一个允许会员进行调查的应用程序(会员与Response有一对多的关系).Response保存member_id,question_id及其答案.
调查全部或全部提交,因此如果该成员的响应表中有任何记录,则他们已完成调查.
我的问题是,如何重新编写下面的查询,以便它实际工作?在SQL中,这将是EXISTS关键字的主要候选者.
 def surveys_completed
    members.where(responses: !nil ).count
 end 
我找到了一个答案,其中有一些可用的having例子可以找到有n孩子的父母,但同样不能用于找到没有孩子的父母(大概是因为连接不包括他们).
scope :with_children, joins(:children).group("child_join_table.parent_id").having("count(child_join_table.parent_id) > 0")
谁能指出我正确的方向?
如果我有一个模型Person,has_many Vehicles每个模型都Vehicle可以是类型,car或者motorcycle我如何查询所有拥有汽车的人和所有拥有摩托车的人?
我不认为这些是正确的:
Person.joins(:vehicles).where(vehicle_type: 'auto')
Person.joins(:vehicles).where(vehicle_type: 'motorcycle')
我有三个模型:
class User < ActiveRecord::Base
  has_many :rosterplayers
  has_many :rosters, -> { uniq } ,  :through => :rosterplayers
end
class Roster < ActiveRecord::Base
  has_many :rosterplayers
  has_many :users, -> { uniq }, through: :rosterplayers
end
class Rosterplayer < ActiveRecord::Base
  belongs_to :roster
  belongs_to :user
  validates :user_id, :uniqueness => { :scope => :roster_id }
end
Rosterplayer 表包含三列:user_id,roster_id,和pending(布尔值)
问题:给定一个名册,我将如何检索当前待处理的所有用户?
尝试:我的第一次尝试是遍历名册中的所有用户:
@team.rosters[0].users.each do |u|
  Rosterplayer.find_by(roster_id: rosters[0].id, user_id: u.id, pending: true)
end
但我觉得有更好的方法来做到这一点。
我有三个型号
Tag=> :id,:nameTagging=> ,,:id:tag_id:post_idPost=> :id,:summary我知道标签的ID.我想tag_id通过Taggings模型查询具有特定内容的所有帖子.
就像是
@post = Post.joins(:taggings).where(:tag_id => 17)
但这不起作用,因为它在Post模型中寻找tag_id 而不是Tagging模型.
我不知道该怎么做.
我的模特在这里:
class User < ActiveRecord::Base
  has_many :bookmarks
end
class Topic < ActiveRecord::Base
  has_many :bookmarks
end
class Bookmark < ActiveRecord::Base
  belongs_to :user
  belongs_to :topic
  attr_accessible :position
  validates_uniqueness_of :user_id, :scope => :topic_id
end
我想topics用current_user相关的for 来获取所有内容bookmark.ATM,我这样做:
Topic.all.each do |t|
    bookmark = t.bookmarks.where(user_id: current_user.id).last
    puts bookmark.position if bookmark
    puts t.name
end
这很难看并且做了太多的数据库查询.我想要这样的东西:
class Topic < ActiveRecord::Base
  has_one :bookmark, :conditions => lambda {|u| "bookmarks.user_id = #{u.id}"}
end
Topic.includes(:bookmark, current_user).all.each do |t| # this must also includes topics without bookmark …