Note : I don't "speak" ruby, I'll write SQL.
First, my shot at having it in one query :
-- add a boolean column computed from the join
SELECT m.*, (r.id != null) as reviewed
FROM movies m LEFT JOIN reviews r ON r.movieID = m.id AND r.userID = @userID
ORDER BY reviewed ASC, created_at DESC
Next a remark: if your list gets big, you may want to avoid sorting on an unindexed column on each request. You can have one query to fetch the rows, and then have your ruby code sort it (you will still have to merge two list, but only one SQL query) :
-- don't sort on "reviewed"
SELECT m.*, (r.id != null) as reviewed
FROM movies m LEFT JOIN reviews r ON r.movieID = m.id AND r.userID = @userID
ORDER BY created_at DESC
Finally, another remark: you can also try to run two queries which will be more respectful of SQL's cache
-- extract movies : this query is the same for all users. Once cached : all users will get the cached version
SELECT * FROM movies ORDER BY created_at DESC
-- extract the user's reviewed movies. With the right index (userID, movieID), this will only hit the index
SELECT movieID FROM reviews WHERE reviews.userID = @userID
Then in ruby, you should build a mapping reviewed[moviedID] -> {true, false}
from the second query, and split the movies list in two parts. If frequentation goes up, this version may actually be faster.