Я изучаю рельсы из учебника рельсов.У меня проблема в Разделе 11.3.1 , код в Листинге 11.44:
def self.from_users_followed_by(user)
followed_user_ids = user.followed_user_ids.join(', ')
where("user_id IN (?) OR user_id = ?", followed_user_ids, user)
end
не будет возвращать user_id в follow_user_ids.
После поиска в stackoverflowЯ нашел решение здесь , в котором говорится, что просто удалите метод "join", и он работает для меня.
Но мне любопытно, почему при запуске RSPEC не возникает ошибкаудалите метод "join".
В листинге 11.41:
subject { Micropost.from_users_followed_by(user) }
it { should include(own_post) }
it { should include(followed_post) }
Если метод "join" сделает оператор SQL неверным, почему RSPEC прошел?
У кого-нибудь есть такая же проблема?
Обновление 2012.04.03
Я использовал консоль rails для проверки проблемы.
user = User.first
ids = ids = user.following_users.map(&:id).join(', ')
Который получил
User Load (2.6ms) SELECT "users".* FROM "users" INNER JOIN "follows" ON
"follows"."followable_id" = "users"."id" AND "follows"."followable_type" = 'User' WHERE
"follows"."blocked" = 'f' AND "follows"."follower_id" = 1 AND "follows"."follower_type"
= 'User' AND "follows"."followable_type" = 'User'
=> "6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 55, 56, 5"
Затем SQL
Collection.where("user_id IN (?)", ids)
Результат
Collection Load (0.7ms) SELECT "collections".* FROM "collections" WHERE (user_id IN
('6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 55, 56, 5')) ORDER BY collections.created_at DESC
=> []
, который возвращает пустой массив.
Но я получил все мои rspec.До сих пор не знаю.