Буква после числа обозначает тип, к которому вы хотите, чтобы он был приведен. В этом случае integer
. Это также может быть f
для float
или s
для string
.
Я просто сделал это сам, и самый простой способ, который я смог найти, - это просто скопировать / вставить код Rails в мой базовый модуль (или абстрактный объект).
Я дословно скопировал следующие функции из ActiveRecord::Base
assign_multiparameter_attributes(pairs)
extract_callstack_for_multiparameter_attributes(pairs)
type_cast_attribute_value(multiparameter_name, value)
find_parameter_position(multiparameter_name)
У меня также есть следующие методы, которые вызывают / используют их:
def setup_parameters(params = {})
new_params = {}
multi_parameter_attributes = []
params.each do |k,v|
if k.to_s.include?("(")
multi_parameter_attributes << [ k.to_s, v ]
else
new_params[k.to_s] = v
end
end
new_params.merge(assign_multiparameter_attributes(multi_parameter_attributes))
end
# Very simplified version of the ActiveRecord::Base method that handles only dates/times
def execute_callstack_for_multiparameter_attributes(callstack)
attributes = {}
callstack.each do |name, values|
if values.empty?
send(name + '=', nil)
else
value = case values.size
when 2 then t = Time.new; Time.local(t.year, t.month, t.day, values[0], values[min], 0, 0)
when 5 then t = Time.time_with_datetime_fallback(:local, *values)
when 3 then Date.new(*values)
else nil
end
attributes[name.to_s] = value
end
end
attributes
end
Если вы найдете лучшее решение, пожалуйста, дайте мне знать: -)