Rails ActiveRecord: si unisce con LEFT JOIN anziché INNER JOIN

Ho questo codice

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

che genera il seguente 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 

è ansible fare LEFT JOIN invece di INNER JOIN in modo diverso da User.find_by_sql e manualmente digitando la query?

Puoi provare questo

 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") 

Solo per riferimento futuro, aggiungendo :all danno un messaggio deprecato. Nelle versioni successive dei binari puoi semplicemente concatenare i metodi in questo modo:

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

O usare uno scope come questo:

 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") } 

Puoi anche eseguire una catena. Tra il .join e il .select . Spero che questo aiuti qualcuno in futuro.

Rails 5 ha un metodo left_outer_joins . Quindi puoi farlo

 User.left_outer_joins(:user_points) 

o usare l’alias

 User.left_joins(:user_points)