Это потому, что NilClass
не отвечает на empty
:
nil.class #=> NilClass
nil.respond_to? :empty?
#=> false
Пока отвечает на is_a?
:
nil.respond_to? :is_a?
#=> true
Показывает все методы nil
отвечает на:
nil.methods
#=> [:&, :inspect, :to_a, :to_s, :===, :to_f, :to_i, :=~, :to_h, :nil?, :to_r, :rationalize, :|, :to_c, :^, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_set, :protected_methods, :instance_variables, :instance_variable_get, :public_methods, :private_methods, :method, :public_method, :public_send, :singleton_method, :define_singleton_method, :extend, :to_enum, :enum_for, :<=>, :!~, :eql?, :respond_to?, :freeze, :object_id, :send, :display, :hash, :class, :singleton_class, :clone, :dup, :itself, :yield_self, :then, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :frozen?, :methods, :singleton_methods, :equal?, :!, :==, :instance_exec, :!=, :instance_eval, :__id__, :__send__]
Если исправить, проверив сначала наличие значения для ключа
:notice
, как показано в этом примере:
https://api.rubyonrails.org/classes/ActionDispatch/Flash.html, возникает синтаксическая ошибка, которая указываетв скобках отсутствует:
flash[:notice] && flash[:notice].is_a? Array && flash[:notice].empty?
# syntax error, unexpected tCONSTANT, expecting end-of-input
# ...] && flash[:notice].is_a? Array && flash[:notice].empty?
# ^~~~~