我有一个带有成员due_date的模型任务。我正在使用Chronic从用户那里获取自然语言输入并将其转换为时间,然后将其保存到模型中。
我只是不确定最好的Rails,MVC是处理这些用例的方法:
格式化时间的辅助方法是我的第一个想法,如下所示:
<%= format_time task.due_date %>
结合我的Task模型中访问器上的重载setter,如下所示:
attr_accessor :due_date_string
def due_date_string=(string)
self.due_date = Chronic.parse(string)
end
除了在我的表单中进行编辑之外,我在任何地方都可以使用:
<div class="field">
<%= f.label :due_date %>
<%= f.text_field :due_date_string %>
</div>
我不知道如何正确地使f.text_field元素'连线',以便保存到:due_date_string,但使用辅助方法显示字符串。
我不一定需要特定的代码示例,只需要寻找专业Rails-ers将在这里使用的模式。
谢谢!
答案 0 :(得分:1)
根据MVC惯例,数据句柄是关于模型层责任的。 所以你正朝着正确的方向去做一个setter(due_date属性的包装器):
您需要检查attr_acessible是否可以从params
获取数据def due_date_string=(string)
self.due_date = Chronic.parse(string) || Date.today
end
显示解析日期的表示逻辑是帮助层责任
答案 1 :(得分:1)
为了使用:
f.text_field :due_date_string
您是否还需要新属性的getter?如,
def due_date_string
format_time self.due_date
end
或许分享使用自定义文本字段时发生的错误或失败。 :)