如果您只想传输 SQL,这是可用的:
User.find_by_sql("...")
但是,如果您在命名 (invitations.user_id) 时遵循 Rails 约定,并将邀请计数存储在用户上(并在添加邀请时更新它),而不是每次都进行加入以获取它,您可以这样做:
对用户:
scope :emailable, where('users.email_address IS NOT NULL')
scope :low_invitations, where('users.invitation_count < 5')
然后查询少于 5 个邀请和电子邮件地址的用户,按邀请数排序:
@users = User.emailable.low_invitations.order('invitation_count asc')
然后使用以下内容访问用户的邀请:
@user.invitations
@user.invitations.count
etc
对于上述情况,您必须向用户添加一个invitation_count col,将sender_id 更改为user_id,并向用户模型添加一些范围。您也可以使用联接来获取计数,而无需非规范化的邀请计数。
如果您打算使用 Rails,那么遵循这些约定要比反对它们容易得多,并且您可能会发现值得设置一个小型实验性应用程序并使用关系,并阅读关联指南:
http://guides.rubyonrails.org/association_basics.html