Методы контроллера не могут быть вызваны напрямую, как вы собираетесь из представления.
Кроме того, кажется, что существует некоторая путаница в том, как работает разделение MVC в Rails.
Ваша переменная current_user (в представлении) соответствует слою «Модель», и поэтому vote_up?
должен быть методом любого экземпляра класса current_user. Это будет определено в models/User.rb
или что-то в этом роде, и должен существовать метод vote_up?
, который просто запрашивает экземпляр пользователя и возвращает логическое значение.
Это не имеет никакого отношения к действию controller_up контроллера. Это не вернет само значение: я понимаю, что на самом деле нужно проголосовать за «микросообщение». Метод в контроллере будет запущен в ответ на запрос пользователя, сделает некоторые вещи для объектов из базы данных (уровень модели), возможно, поместит некоторые из этих объектов модели в переменные и вызовет представление, чтобы показать информацию пользователю (возможно, взяты из этих объектов). Но методы в контроллерах не должны вызываться из представления.
Между прочим, выполнение == true
, как вы делаете в Micropost HTML, является избыточным, как обычно, методы, заканчивающиеся на ?
, возвращают логическое значение. Вы можете просто:
<% if current_user.vote_up?(@micropost) %>