Forum: Ruby on Rails How to pass parameters to after_update callback?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Szymon N. (Guest)
on 2008-10-23 16:24
(Received via mailing list)
Hi,

I got i.e. Ticket and TicketChange models and would like to create
TicketChange object whenever Ticket object is updated.

Currently I'm creating new TicketChange in Ticket#after_update
callback and simply serialize slightly modified ticket.changes hash.
Ticket can be updated using 2 ways - using in-place-editors (ajax) and
a form.

The problem is with updating through the form - I'd like users to be
able to comment the change and upload files for each change (I'm using
attachment_fu). The form is passing parameters to
TicketController#update action, the ticket is updated and
automagically ticket change is created as well. But how to pass the
comment and file to it?

Any tips how to solve it?
Craig D. (Guest)
on 2008-10-23 17:18
(Received via mailing list)
Since the after_update is declared in your Ticket model, you should be
able
to access the params hash from the method. For example

class Ticket < ActiveRecord::Base
  ...
  after_update :record_changes
  ...
  private
  ...
  def record_changes
    TicketChange.create!(params[:comment], params[:filename], ...)
    ...
  end
end

Regards,
Craig
Robby R. (Guest)
on 2008-10-23 18:41
(Received via mailing list)
Unless you provide the parameters to the model, any callbacks will be
unable to see them. (assuming that you're talking about the parameters
from a form post?)

On Thu, Oct 23, 2008 at 5:23 AM, szimek <removed_email_address@domain.invalid> 
wrote:
>
> The problem is with updating through the form - I'd like users to be
> able to comment the change and upload files for each change (I'm using
> attachment_fu). The form is passing parameters to
> TicketController#update action, the ticket is updated and
> automagically ticket change is created as well. But how to pass the
> comment and file to it?
>
> Any tips how to solve it?
> >
>



--
Robby R.
Chief Evangelist, Partner

PLANET ARGON, LLC
design // development // hosting

http://www.planetargon.com/
http://www.robbyonrails.com/
aim: planetargon

+1 503 445 2457
+1 877 55 ARGON [toll free]
+1 815 642 4068 [fax]
Robby R. (Guest)
on 2008-10-23 19:45
(Received via mailing list)
Your models don't have direct access to params unless you explicitly
pass them to the model. This would violate the MVC pattern otherwise.

Robby

On Thu, Oct 23, 2008 at 6:17 AM, Craig D.
<removed_email_address@domain.invalid> wrote:
>     TicketChange.create!(params[:comment], params[:filename], ...)
>     ...
>   end
> end
>
> Regards,
> Craig
>
> >
>



--
Robby R.
Chief Evangelist, Partner

PLANET ARGON, LLC
design // development // hosting

http://www.planetargon.com/
http://www.robbyonrails.com/
aim: planetargon

+1 503 445 2457
+1 877 55 ARGON [toll free]
+1 815 642 4068 [fax]
Craig D. (Guest)
on 2008-10-23 20:24
(Received via mailing list)
D'oh. I should more carefully reply to posts after just waking up. I
don't
know how I mixed controllers and models this morning. Time to enjoy the
MVC
public service announcements <http://www.railsenvy.com/tags/MVC> again.
Sorry for the confusion everyone.

Craig
Andrius C. (Guest)
on 2008-10-24 17:49
(Received via mailing list)
How about making two read-write attributes, one for changes and one
for files, in Ticket model. They would be automatically assigned from
params hash (yes you can assign any attribute using params hash, not
only database related fields) and you could use them in after update
method.
This topic is locked and can not be replied to.