Change date and numbers format, before_validation()


#1

Hello,

I need to change/adapt of the date and float numbers the user enters:

dd/mm/yyyy I have to change into yyyy-mm-dd

and numbers, replace the , with the .

1245,85 => 1245.85

I thought the best place was using the before_validation() but here the
objects come with standard Rails formats, and the date is wrong, and the
numbers are also wrong.

Now I’m doing all the stuff in the Controller:

def update

@transaction=Transaction.find(params[:id])

if @transaction.update_attributes(params[:transaction])

@transaction.data=convert_european_date(@transaction.data.to_s)
@transaction.amount = params[:transaction][:amount].to_s.gsub(’,’,
‘.’).to_f

end

But this is a pain If I have to duplicate code for new and update
controllers method.

So I tried to move the code into the model before_validation but there
the self.data and self.amount are wrong, as Rails adapt them to what
they think it’s the standard way …

In the controller I can get the fresh value from params, but in the
model it doesn’t exist …

what’s the best solution to my problem ?

thanks!

r.


#2

since this problem is closely linked to your user’s entries, you gotta
solve it in your view or controller. to not repeat yourself too much
you could add a helper-method for that piece of code you are using to
set your records straight.


#3

MaD wrote:

since this problem is closely linked to your user’s entries, you gotta
solve it in your view or controller. to not repeat yourself too much
you could add a helper-method for that piece of code you are using to
set your records straight.

yes and no, this problem is the same for lots of users that doesn’t
follow the US format number and dates …

I’m using the helpers for displaying the records, but I can’t use them
in the controller, so I created two methods in the Application
Controller, at least it’s working but not the way Rails is proposing …

thanks!

r.


#4

MaD wrote:

well, helpers are really meant for helping with displaying your data.
thats right. i actually didn’t mean to write a helper-method, but a
method (in your controller) to help you with setting your records. my
fault (got lost in translating my thoughts).
i think your aproach of putting it into application-controller is a
good one (as long as you really need that method in more than one
controller).

yes, you’re right: helpers are for help no matter where they help …

:slight_smile:

r.


#5

well, helpers are really meant for helping with displaying your data.
thats right. i actually didn’t mean to write a helper-method, but a
method (in your controller) to help you with setting your records. my
fault (got lost in translating my thoughts).
i think your aproach of putting it into application-controller is a
good one (as long as you really need that method in more than one
controller).


#6

On Wed, Mar 4, 2009 at 9:39 AM, MaD removed_email_address@domain.invalid wrote:

well, helpers are really meant for helping with displaying your data.
thats right. i actually didn’t mean to write a helper-method, but a
method (in your controller) to help you with setting your records. my
fault (got lost in translating my thoughts).
i think your aproach of putting it into application-controller is a
good one (as long as you really need that method in more than one
controller).

One question I have for some time now is:

What is the idiomatic place in the directory tree for positioning such
“controller_helpers” ?

…/app/helpers/ is really for view helpers.

Of course, they could go in

…/app/controllers/application.rb

but then, that is inherited by all controllers.

We now put some “controller-helpers” in modules under /lib/
and then include those modules selectively in controllers.

Or should we use sub classes for everything, but I read that is not
the “Rails-way” either.

Would it make sense to have default locations for “controller_helpers”.

Maybe something along the lines of:

/app/view_helpers
/app/controller_helpers
/app/helpers --> /app/view_helpers

The concept of

helper :all (that we actually use now in
…/app/controllers/application.rb)

also seems broken as this is unclean mixing of view and controller
helpers.

How should I do this in a clean fashion ?

Thanks,

Peter


#7

well, you could always create a helper with an arbitrary name and
include them in your controller. that way helpers are all huddled
together in one folder, but that special controller_helper gets only
included in controller that depend on it.