display optional db data

ive got a few models that may or may not have some data: urls / phone numbers / dates / times / etc whats the best way to test and format this data for displaying on a webpage?

the way im thinking of doing it would be a few lines of code to: - test if not null - format properly - display in proper div / ul container

and then do that for each thing is there a cleaner way to do this?

could someone perhaps advise on how to move some of this logic from view to model? like 'get_price_info' and it returns the properly formatted string or nothing? or should these tests be performed in the view?

I'm not sure what you're looking for here; if you have a view with e.g. <%= @thing.foo %> and this particular "foo" is nil, nothing will display, otherwise you get the value of "foo".

If that's not the behavior you want, please describe in more detail.

if thing.foo is a date, price, url or something else that requires formatting, it requires more than =thing.foo and since you cant format nil, a test needs to be performed before trying to format said data my views are getting littered with these tests and formats, sometimes there nested: is there price data? is there an advance purchase price? is there an advance purchase expiry date?

its getting kinda ugly in my view whats the best way to handle this?

Some possible approaches:

1) make the default in the database some value other than null.

2) <%= @thing.foo.format rescue nil %>

3) <%= @thing.foo.nil? ? " N/A " : @thing.foo.format %>

I'm sure someone will suggest others, but HTH :slight_smile:

The logic for this probably belong in view helpers and not in the model since its really about how the data is displayed and not about how the data behaves.

anyone have a good example of how best to move this logic to a helper?

It would be easier if you post the actual view code, and then somebody can show you how you might refactor it by moving logic into helpers