自我问题.Ruby元编程中的attribute = '



所以我正在考虑使用方法缺失来构建我需要管理的大量日期时间的几个日期时间方法。

我基于Ryan Bates虚拟属性的这种方法,我相信我有这个元编程的挑战(我的第一个!)除了一个小混乱,我还没有解决…

对于我的方法的这一部分,我得到一个关于=的错误,这应该是意想不到的…

    define_method(save_method) do
      self.send(attribute) = Chronic.parse(args[0], context: :past) if instance_variable_get("@#{method_name}").present?
    end

该方法应该期待)而不是…但我一直没能弄明白。

def method_missing(method_name, *args)
  if method_name.to_s.match(/^chronic_(w+)/)
      save_method     = "save_#{method_name}"
      validate_method = "check_#{method_name}"
      attribute = method_name.to_s.gsub(/^chronic_/, '').to_sym
      self.class.class_eval do
        attr_accessible method_name.to_sym
        attr_writer     method_name.to_sym
        validate        validate_method.to_sym
        before_save     save_method.to_sym
        define_method(save_method) do
          self.send(attribute) = Chronic.parse(args[0], context: :past) if instance_variable_get("@#{method_name}").present?
        end
        define_method(validate_method) do
          if instance_variable_get("@#{method_name}").present? && Chronic.parse(args[0], context: :past).nil?
            errors.add :released_at_text, "cannot be parsed"
          end
        end
        define_method(method_name) do
          instance_variable_get("@#{method_name}") || attribute
        end
      end
      puts attribute
      send(method_name)
    else
      super
    end
  end
define_method(save_method) do
  self.send("#{attribute}=", Chronic.parse(args[0], context: :past)) if instance_variables.include?("@#{method_name}")
end

" = "是setter方法名的一部分,所以必须输入send("#{attribute}=", value)

相关内容

  • 没有找到相关文章

最新更新