<%= date_select :person, :birth_date %>
像这样创建一个params哈希:
{'person' => {'birth_date(1i)' => '2008', 'birth_date(2i)' => '11', 'birth_date(3i)' => '22'}}
可以将其传递给模型实例。什么Rails组件处理将此输入转换为传递给setter的日期?
答案 0 :(得分:1)
这些&#34; 多参数属性&#34; (在Rails中调用)在属性分配期间转换回单个值,即在Model.new
或Model.update_attributes
等方法调用期间。
相关代码可以在AttributeAssignment
的{{1}}模块中找到, assign_multiparameter_attributes
method 。引用其文档字符串:
为需要多个构造函数参数的所有属性类实例化对象。这是通过使用这些参数在列类型或聚合类型(通过composed_of)对象上调用
ActiveRecord
来完成的。因此,拥有
new
,written_on(1) = "2004"
,written_on(2) = "6"
对将使用written_on(3) = "24"
实例化written_on
(日期类型)。您还可以在括号中指定类型转换字符,以便在构造函数中使用之前对参数进行类型转换。对
Date.new("2004", "6", "24")
使用i
,Fixnum
使用f
。如果给定属性的所有值都为空,则该属性将设置为Float
。
答案 1 :(得分:0)
负责处理日期的Ruby模块是ActiveSupport
,特别是Ruby内置的DateTime
模块的扩展。
如果你在HTML中专门询问选择框,那就是ActionView
辅助方法,它会为date_select
提供一个选择框。
希望这能回答你的问题。