views:

377

answers:

1

I'm in the process of learning Sinatra and DataMapper. To do so, I've been playing with a "customer database" project.

Creating and deleting records is trivial and now I'm working on editing records. So far I've managed to piece together a form in my views and a couple of routes that I thought would edit a record. Here's some code to illustrate my issue:

My edit.erb view: http://gist.github.com/308405

My edit/update routes:

get '/edit/:acct' do
  @title = "Edit Client Data"
  @client = HE_Backend.get(params[:acct])
  erb :edit
end

post '/update/:acct' do
  client = HE_Backend.get(params[:acct])

  client.attributes = {
  :name => params['client']['name'],
  :company => params['client']['company'],
  :street => params['client']['street'],
  :state => params['client']['state'],
  :zip => params['client']['zip'],
  :phone => params['client']['phone'],
  :fax => params['client']['fax'],
  :website => params['client']['website'],
  :order_date => params['client']['order_date'],
  :payment_date => params['client']['payment_date'],
  :monthly => params['client']['monthly'],
  :setup => params['client']['setup'],
  :details => params['client']['details'],
  :notes => params['client']['notes'],
  :status => params['client']['status'],
  }

  if client.save
    redirect "/show/#{client.acct}"
  else
    redirect('/list')
  end
end

It looks like the "client.save" portion of the route is returning false, because I'm getting redirected to "/list" each time. If I use the #update method rather than #save, DM complains about "dirty records".

Anyone have any ideas as to what I'm doing wrong or can you point me to examples for editing records in SQLite with DataMapper and Sinatra?

Thanks!

A: 

This turned out to be a validations issue. If I don't have validations in place and put data types other than what's in my model in those fields, the #save method apparently returns false.

hooobs