I was writing without testing it out myself. save! does not do validation and the hope was that it does not trigger "atfer save" again otherwise you end up in an endless loop.
this time I tested it and works for me https://gist.github.com/906962 - Kristian On Apr 7, 1:56 am, DAZ <daz4...@gmail.com> wrote: > Hi Kristian, > > The code I have shown is not the exact code I am using - it has to be > saved to the database. I just gave this code so it was easier to > follow. > > > without looking into the datamapper code, but the create method is on > > the model class and NOT on instance. my guts feeling is to do > > something like > > > after :save do > > self.url ='/mysite/' << self.id.to_s > > self.save! > > end > > How come self.save!, what's the difference with this and self.save? > > cheers, > > DAZ > > On Apr 6, 3:00 pm, kristian <meier.krist...@gmail.com> wrote: > > > even in case I am on the wrong track, but there is no need to have the > > url in the database, just have a method > > > def url > > "/mysite/#{self.id}" > > end > > > in case you want to be able set the url with something differently > > after create, you could do something like > > > def url > > u = attribute_get(:url) > > if u > > u > > else > > "/mysite/#{self.id}" > > end > > end > > > so basically a database NULL will be your default otherwise return the > > database value > > > without looking into the datamapper code, but the create method is on > > the model class and NOT on instance. my guts feeling is to do > > something like > > > after :save do > > self.url ='/mysite/' << self.id.to_s > > self.save! > > end > > > regards, Kristian > > > On Apr 6, 11:02 am, DAZ <daz4...@gmail.com> wrote: > > > > Thanks for pointing out my schoolboy error there Jon! > > > > This now works: > > > post '/new' do > > > @page = Page.create(params[:page]) > > > @page.url = '/mysite/' << @page.id.to_s > > > @page.save > > > ....etc > > > > But this feels really ugly - surely this logic should be in the model, > > > not the controller? In this implementation, the url only gets saved > > > when the resource is created on the web. > > > > Is there a way to do something similar using the after :create hook? I > > > can't see why this doesn't work, as it should do the same as the code > > > above: > > > > after :create do > > > self.url ='/mysite/' << self.id.to_s > > > self.save > > > end > > > > cheers, > > > > DAZ > > > > On Apr 5, 10:59 pm, Jonathan Stott <jonathan.st...@gmail.com> wrote: > > > > > For that to work, you want `...@page.id` not `self.id` > > > > > Regards > > > > Jon > > > > > On 5 April 2011 22:55, DAZ <daz4...@gmail.com> wrote: > > > > > > Since I couldn't get the after :create hook to work, I tried putting > > > > > this ugly code in a handler: > > > > > > post '/new' do > > > > > @page = Page.create(params[:page]) > > > > > @page.url = '/mysite/' << self.id.to_s > > > > > @page.save > > > > > > This 'works', but strangely the id seems to be an object id, rather > > > > > than the id property from the database. What's going on here?? > > > > > > There must be a way of using a resource's id property to set another > > > > > property ... surely? > > > > > > cheers, > > > > > > DAZ > > > > > > On Apr 5, 5:47 pm, DAZ <daz4...@gmail.com> wrote: > > > > >> > Is there any 'best practice' way of doing this sort of thing? > > > > > >> > For example, do I use an after :create hook and then call > > > > >> > self.save at > > > > >> > the end? > > > > >> > eg > > > > >> > after :create do > > > > >> > self.url ='/mysite/' << self.id.to_s > > > > >> > self.save > > > > >> > end > > > > > >> Well the 'best practice' way is definitely not this way because it > > > > >> returns false - the resource is created but then is not saved > > > > >> afterwards and the url property is considered 'dirty' (what does that > > > > >> actually mean?? > > > > > >> I'm puzzled by this! > > > > > >> DAZ > > > > > > -- > > > > > You received this message because you are subscribed to the Google > > > > > Groups "DataMapper" group. > > > > > To post to this group, send email to datamapper@googlegroups.com. > > > > > To unsubscribe from this group, send email to > > > > > datamapper+unsubscr...@googlegroups.com. > > > > > For more options, visit this group > > > > > athttp://groups.google.com/group/datamapper?hl=en. -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to datamapper@googlegroups.com. To unsubscribe from this group, send email to datamapper+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/datamapper?hl=en.