事实证明我误解了#date_select
形式辅助方法是如何工作的 - 我根据this answer得出了下面的方法,但经过一些修补后,I discovered that, in typical Rails fashion, #date_select
actually handles the whole thing automagically。
在任何情况下,有时候我还想做类似的事情:例如,如果我想将单个User.tenure
属性捕获为序列化哈希({ start: <year>, end: <year> }
),并且我在视图表单中将其实现为两个单独的字段,这些字段返回参数:tenure_start
和:tenure_end
。
逻辑在哪里将这两个参数转换为单个模型属性?
我想在我的应用程序中为User
模型设置“生日日期”属性。 “新用户”表单使用Rails的内置#date_select
form helper method。
在视图中,#date_select
为年,月和日创建三个单独的下拉菜单。在控制器中,returns three separate parameters:dob(1i)
,dob(2i)
和dob(3i)
。这些参数中的每一个都是其相应字段的字符串表示(例如,如果您选择1992/7/14,参数值为"1992"
,"07"
和{{ 1}})。
我想将这三个字符串参数转换为单个"14"
对象,并将其分配给新的Date
。
我对MVC的理解是控制器应该很薄:它的工作仅仅是在模型和视图之间传递信息。但在上述情况下,存在没有相应模型属性的控制器参数。因此,
User
不起作用,因为User.create(user_params)
不接受User::new
属性(并且如果确实如此,则不知道如何处理它)。需要将它们处理为单个值,如
:"dob(1i)"
之后才能将其保存到dob = params.fetch(:player).values_at(%i(dob(1i) dob(2i) dob(3i))).map(&:to_i)
params.fetch(:player)[:dob] = { player: { dob: Date.new(dob[0], dob[1], dob[2]) } }
属性中。
我的问题是这样的:这个逻辑在控制器中属于多少,模型属于多少?
dob
)并将其保留到模型中,以便在保存之前将其转换为"19920714"
? 答案 0 :(得分:0)
您可以执行以下操作,将实际日期存储在数据库中
year = "1992"
month = "14"
day = "07"
dob = m + '/' + d + '/' + y
=> Date.parse(dob)
=> Tue, 14 Jul 1992