Я не знаю, когда все ваши переменные становятся доступными, но когда я хочу делать проверки в контроллере, я обычно использую обратные вызовы 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
Что это делает, что когда приходит запрос к действию шоу в YourController, он сначала вызывает частный метод check_if_variables_exist. Если значение @your_variable равно нулю, то оно будет в render: nothing => true, и filter_chain будет остановлен, и действие будет никогда не вызываться. Если, однако, ваш_variable не равен нулю, тогда метод завершится без каких-либо действий, и контроллер затем вызовет действие, как обычно.
Итак, все, что вы хотите проверить заранее, может быть размещено в разных обратных вызовах before_filter. И если вы не хотите, чтобы проверить все действия в контроллере, он может быть определен следующим образом:
class YourController
before_filter :first_check, :only => [:index, :show]
before_filter :second_check, :only => [:show, :edit]
На мой взгляд, это «рельсы» способ сделать это.
@Alex render не то же самое, что и return и не выходит из текущего метода. – 2010-11-23 02:45:52