By default when you pass ActiveRecord::Base#joins a named association, it will perform an INNER JOIN. You'll have to pass a string representing your LEFT OUTER JOIN.
:joins - Either an SQL fragment for additional joins like "LEFT JOIN
comments ON comments.post_id = id" (rarely needed), named associations
in the same form used for the :include option, which will perform an
INNER JOIN on the associated table(s), or an array containing a
mixture of both strings and named associations.
If the value is a
string, then the records will be returned read-only since they will
have attributes that do not correspond to the table‘s columns. Pass
:readonly => false to override.
SELECT "posts"."id" AS t0_r0, ...
"comments"."updated_at" AS t1_r5
FROM "posts" LEFT OUTER JOIN "comments" ON "comments"."post_id" = "posts"."id"
WHERE (comments.visible = 1)
class User < ActiveRecord::Base
has_many :friends, :foreign_key=>"u_from",:class_name=>"Friend"
end
class Friend < ActiveRecord::Base
belongs_to :user
end
friends = user.friends.where(:u_req_status=>2).joins("LEFT OUTER JOIN users ON users.u_id = friends.u_to").select("friend_id,u_from,u_to,u_first_name,u_last_name,u_email,u_fbid,u_twtid,u_picture_url,u_quote")