I’ve got a Model Task with a member due_date. I’m using Chronic to take natural language input from the user and convert it to a Time, which then gets saved to the model.
I’m just not sure the best Rails, MVC-ish way to handle these use cases:
- Display a formatted string (with some logic involved) to the user every time I show Task.due_date
- Allow the user to input plaintext and have it parsed automagically everywhere they can edit Task.due_date
A helper method to format time was my first idea, like this:
<%= format_time task.due_date %>
combined with an overloaded setter on an accessor in my Task model, like this:
attr_accessor :due_date_string
def due_date_string=(string)
self.due_date = Chronic.parse(string)
end
This works everywhere I want it to except in my forms for editing:
<div class="field">
<%= f.label :due_date %>
<%= f.text_field :due_date_string %>
</div>
I don’t know how to make the f.text_field element ‘wire up’ properly so that it saves to :due_date_string, but uses the helper method to display the string.
I don’t necessarily need specific code examples, just looking for the kind of pattern that pro Rails-ers would use here.
Thanks!
With according to MVC conventions, data handle is about Model layer responsibility.
So you are going in right direction to do a setter (wrapper for due_date attribute):
You need to check that is attr_acessible that is access to get a data from params
The representation logic to show the parsed date is Helper layer responsibility