Я не знаю, когда все ваши переменные станут доступными, но когда я хочу сделать проверки в контроллере, я обычно использую обратные вызовы before_filter, чтобы сделать это. Например:
class YourController
before_filter :check_if_variables_exist
def show
#prepare for render view
end
private
def check_if_variables_exist
unless @your_variable.nil?
#Do what you want
render :nothing => true
end
end
То, что это делает, - то, что, когда запрос приходит к действию show в YourController, он сначала вызывает частный метод check_if_variables_exist. Если @your_variable равен nil, то он будет отображаться при рендеринге: nothing => true, и filter_chain будет остановлен, и действие action никогда не будет вызвано. Однако, если your_variable не равен nil, метод завершится, ничего не делая, и контроллер затем вызовет action show, как обычно.
Таким образом, все вещи, которые вы хотите проверить заранее, можно поместить в различные обратные вызовы before_filter. И если вы не хотите проверять все действия в контроллере, это можно указать так:
class YourController
before_filter :first_check, :only => [:index, :show]
before_filter :second_check, :only => [:show, :edit]
На мой взгляд, это "рельсовый" способ сделать это.