Редактирование записей с помощью SQLite, DataMapper и Sinatra - PullRequest
0 голосов
/ 19 февраля 2010

Я нахожусь в процессе изучения Sinatra и DataMapper.Для этого я играл с проектом «база данных клиентов».

Создание и удаление записей тривиально, и сейчас я работаю над редактированием записей.До сих пор мне удалось собрать воедино форму в моих представлениях и пару маршрутов, которые, я думал, отредактируют запись.Вот некоторый код, иллюстрирующий мою проблему:

Мое представление edit.erb: http://gist.github.com/308405

Мои маршруты редактирования / обновления:

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

Похоже, часть маршрута client.save возвращает false, потому что меня перенаправляют в «/ list» каждый раз.Если я использую метод #update, а не #save, DM жалуется на «грязные записи».

У кого-то есть какие-либо идеи относительно того, что я делаю неправильно, или вы можете указать мне примеры для редактирования записей в SQLiteс DataMapper и Sinatra?

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2010

Это оказалось проблемой проверки. Если у меня нет проверок и я помещаю в эти поля типы данных, отличные от того, что есть в моей модели, метод #save, очевидно, возвращает false.

...