在The Rails Tutorial 2nd edition 的第 11 章的清单 11.45from_users_followed_by
中,类的类方法Micropost
定义如下:
class Micropost < ActiveRecord::Base
...
def self.from_users_followed_by(user)
followed_user_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
where("user_id IN (#{followed_user_ids}) OR user_id = :user_id",
user_id: user.id)
end
end
在本章的脚注 13中,有一个指向此博客文章的链接,其中说如果要创建子选择字符串,可以将 ActiveRecord 内部方法construct_finder_sql
与该方法一起使用。send
因此,我尝试将followed_user_ids
字符串替换为:
followed_user_ids = Relationship.send(:construct_finder_sql,
select: "followed_id",
conditions: { follower_id: :user_id })
唯一的问题是它在 Rails 3 中construct_finder_sql
被贬值了,所以我不知道我写的内容是否正确,无论如何我都不能使用它。:user_id
那么,是否有一种 Rails 3 方法可以在这种情况下使用 ActiveRecord(最好仍然使用参数)创建子选择字符串?