Обычно, в Rails, когда что-то очень сложно, это потому, что вы не подходите к проблеме с идеального угла. Я не могу ответить на этот вопрос напрямую, кроме как советовать не делать этого. В идеале логика просмотра должна быть в представлении, а не в контроллере. За некоторыми редкими исключениями, например, используя вспомогательный элемент link_to во флэш-сообщении (which can be easily solved), эти проблемы следует разделить. Это не похоже на одно из этих исключений. Вместо этого, я рекомендовал бы один из следующих методов (чуть больше Rails-у):
Вариант 1:
Похоже, что вы пытаетесь вынести мнение на шоу действия. Это можно легко выполнить, используя render :action => 'show'
(docs). Это не будет запускать код для действия, просто используйте это представление.
Вариант 2
В том случае, если вариант 1 не является жизнеспособным в вашей ситуации, вы можете в качестве альтернативы рассмотреть некоторые вариации по следующей методике. Отобразить представление по умолчанию, как обычно. Переместите существующее содержимое представления в частичное, а ваше новое содержимое - в частичное. Тогда, на ваш взгляд, просто переключите частичное рендеринг, основанное на соответствующем условии - существование @user, для этого примера: render :partial => @user ? 'new_content' : 'existing_content'
. В зависимости от вашей структуры приложения может быть, что это может быть упрощено, просто отринув одно и то же частичное из вашего представления просмотра и вид действия, упомянутого в вопросе.
Я думаю, что сохранение различных элементов приложения, изолированного от их предполагаемых задач, не только упрощает разработку и сопровождение, следуя principle of least astonishment, но также обычно делает приложение намного проще в тестировании. Извините, что не ответил на ваш вопрос - надеюсь, что это поможет.
вы имеете в виду в модели? – vinhboy