Сохранение DataMapper не удалось, но без ошибок

Когда я пытаюсь изменить, а затем сохранить модель с помощью DataMapper, я получаю исключение SaveFailure, но без ошибок.

В частности, я вижу это сообщение: «MonthlyBill # save вернул false, MonthlyBill не сохранен»

Это код, выполняющий сохранение:

post '/monthly_bills' do
  with_authenticated_user do |user|
  description = params[:description]
  expected_amount = params[:expected_amount]
  pay_period = params[:pay_period]

  monthly_bill = MonthlyBill.new(:description=>description, :expected_amount=>expected_amount, :pay_period=>pay_period)
  user.monthly_bills << monthly_bill
  user.save
end

Модель User:

class User
  include DataMapper::Resource

  property :id,             Serial
  property :email_address,  String
  property :password,       String

  has n, :monthly_bills
  has 1, :current_pay_period
end

Модель MonthlyBill:

class MonthlyBill
  include DataMapper::Resource

  property :id,             Serial
  property :description,    String
  property :expected_amount,Decimal
  property :pay_period,     Integer

  belongs_to :user
end

В чем проблема и, что более важно, как я могу заставить DataMapper более конкретно сообщать мне, что не так?


person Justin Bozonier    schedule 31.12.2010    source источник


Ответы (1)


Хм, эти свойства, написанные заглавными буквами, меня тревожат. Я бы сделал...

has n, :monthly_bills 
has 1, :current_pay_period #do you really have a CurrentPayPeriod model?!

А потом попробуйте:

monthly_bill = MonthlyBill.new(:description=>description,:expected_amount=>expected_amount, :pay_period=>pay_period, :user=>user)
monthly_bill.save
person stef    schedule 31.12.2010
comment
lol Я знаю ... В моей проблемной области нет программного способа для определения периода оплаты ... - person Justin Bozonier; 31.12.2010
comment
также я внес предложенные вами изменения, и у меня все еще та же ошибка. Однако я оставил свой класс MonthlyBill заглавными буквами. Это нормально? - person Justin Bozonier; 31.12.2010
comment
STDERR.puts month_bill.errors.inspect, если month_bill.valid? и вы удалили строку user.monthly_bills ‹ - person stef; 31.12.2010
comment
Я упустил возможность попробовать month_bill.save - person Justin Bozonier; 31.12.2010
comment
Итак, теперь я получаю свои ошибки ... исправлено одно, а другое связано с тем, что какое-то свойство не устанавливается, когда оно даже не существует в моей модели ... спасибо, что помогли мне двигаться вперед! :) - person Justin Bozonier; 31.12.2010
comment
отлично - рад, что мы разобрались. Убедитесь, что ваша модель синхронизирована с вашей реальной структурой базы данных ... - person stef; 31.12.2010
comment
Ага. Все готово и снова под контролем. Спасибо! - person Justin Bozonier; 31.12.2010