哪个Rails组件负责解析来自`date_select`的输入?

时间:2016-04-16 20:06:44

标签: ruby-on-rails

<%= date_select :person, :birth_date %>

像这样创建一个params哈希:

{'person' => {'birth_date(1i)' => '2008', 'birth_date(2i)' => '11', 'birth_date(3i)' => '22'}}

可以将其传递给模型实例。什么Rails组件处理将此输入转换为传递给setter的日期?

2 个答案:

答案 0 :(得分:1)

这些&#34; 多参数属性&#34; (在Rails中调用)在属性分配期间转换回单个值,即在Model.newModel.update_attributes等方法调用期间。

相关代码可以在AttributeAssignment的{​​{1}}模块中找到, assign_multiparameter_attributes method 。引用其文档字符串:

  

为需要多个构造函数参数的所有属性类实例化对象。这是通过使用这些参数在列类型或聚合类型(通过composed_of)对象上调用ActiveRecord来完成的。

     

因此,拥有newwritten_on(1) = "2004"written_on(2) = "6"对将使用written_on(3) = "24"实例化written_on(日期类型)。

     

您还可以在括号中指定类型转换字符,以便在构造函数中使用之前对参数进行类型转换。对Date.new("2004", "6", "24")使用iFixnum使用f。如果给定属性的所有值都为空,则该属性将设置为Float

答案 1 :(得分:0)

负责处理日期的Ruby模块是ActiveSupport,特别是Ruby内置的DateTime模块的扩展。

如果你在HTML中专门询问选择框,那就是ActionView辅助方法,它会为date_select提供一个选择框。

希望这能回答你的问题。