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.