#image_url
- это метод для отдельного сообщения, но здесь вы пытаетесь вызвать его для коллекции сообщений (@user.posts
возвращает ActiveRecord :: Relation). Попробуйте поменять limit(1)
на first
(который запустит тот же SQL) и переместите #image_url
в конец цепочки вызовов. Таким образом, он получит один пост, а затем вызовет #image_url
.
image_tag @user.posts.order("rand()").first.image_url(:thumb)
Но, как подсказывает Жестяный человек, обычно лучше помещать запросы в контроллеры. На самом деле это не повлияет на производительность, но это более стандартная практика, она поможет, если / когда другие прочитают ваш код.
# in Controller
def action_name
# ...
@random_image_url = @user.posts.order("rand()").first.image_url(:thumb)
end
# in view
image_tag @random_image_url