2010-02-19 7 views
0

Je suis en train d'apprendre Sinatra et DataMapper. Pour ce faire, j'ai joué avec un projet "base de données client".Modification d'enregistrements avec SQLite, DataMapper et Sinatra

Créer et supprimer des enregistrements est trivial et maintenant je travaille sur l'édition des enregistrements. Jusqu'à présent, j'ai réussi à assembler un formulaire dans mes vues et quelques routes que je pensais éditer un disque. Voici un code pour illustrer mon problème:

Mon vue edit.erb:http://gist.github.com/308405

Mes itinéraires modifier/mise à jour:

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 

Il ressemble à la partie "client.save" de la route retourne false, parce que je suis redirigé vers "/ list" chaque fois. Si j'utilise la méthode #update plutôt que #save, DM se plaint de "dirty records". Tout le monde a des idées sur ce que je fais mal ou pouvez-vous me donner des exemples d'édition d'enregistrements dans SQLite avec DataMapper et Sinatra?

Merci!

Répondre

0

Cela s'est avéré être un problème de validation. Si je n'ai pas de validations en place et que je place des types de données autres que ceux de mon modèle dans ces champs, la méthode #save renvoie apparemment false.