因此,我正在考慮使用缺少的方法來構建幾個我需要管理的日期時間所需的日期時間方法。元編程中`self.attribute =`的問題Ruby
我立足於瑞安貝茨虛擬屬性這個方法,我相信我有這樣的元編程挑戰下來(我第一個!)不同的是,我還沒有解決的一個小天翻地覆......
對於這部分我的方法,我得到關於這應該是意外的=
錯誤...
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
你能再指定的方法的一部分,究竟是你的代碼的問題?你想做什麼? –
@SergioTulentsev - 根據下面的zed_0xff答案解決,但仍然有麻煩,你可以在評論中看到。任何提示都會被學習程序員所欣賞。 – ovatsug25