Rails的ActiveRecord:连接与左连接,而不是INNER JOIN

我有这个代码

User.find(:all, :limit => 10, :joins => :user_points, :select => "users.*, count(user_points.id)", :group => "user_points.user_id") 

其中生成以下SQL

 SELECT users.*, count(user_points.id) FROM `users` INNER JOIN `user_points` ON user_points.user_id = users.id GROUP BY user_points.user_id LIMIT 10 

是否有可能使用LEFT JOIN而不是INNER JOIN,除了User.find_by_sql和manualy键入查询?

你可以试试这个

 User.find(:all, limit: 10, joins: "LEFT JOIN `user_points` ON user_points.user_id = users.id" , select: "users.*, count(user_points.id)", group: "user_points.user_id") 

只是为了将来的参考,增加:all给出了一个不推荐的消息。 在更高版本的rails中,你可以简单地链接这样的方法:

 User.joins("LEFT JOIN `user_points` ON user_points.user_id = users.id").select("users.*, count(user_points.id)").group("user_points.user_id") 

或者使用这样的范围

 scope :my_scope_name_here, -> { joins("LEFT JOIN `user_points` ON user_points.user_id = users.id") .select("users.*, count(user_points.id)") .group("user_points.user_id") } 

你也可以在.join.select之间.select 。 希望这有助于未来的人。