DataMapper не может сохранить в mysql и создать объект с id = nil

#mysql #ruby #datamapper

#mysql #ruby #datamapper

Вопрос:

Я следую примеру tinyclone при клонировании интернет-приложения с помощью Ruby и пытаюсь создать объект для сохранения в mysql.

Однако всякий раз, когда я пытаюсь создать объект Url (см. Код Ниже), результат всегда «=> Url @id = nil @original =»http://www.gmail.com » @link_identifier=ноль»

Идентификатор не создается, и данные не сохраняются в базе данных. Ссылка на базу данных sql верна, поскольку я уже пытался удалить базу данных и воссоздать ее с помощью DataMapper.auto_migrate!

Кто-нибудь может помочь? Спасибо.

 DataMapper.setup(:default,'mysql://root@localhost/tinyclone')

class Url
  include DataMapper::Resource
  property  :id,          Serial
  property  :original,    String, :length => 255   
  belongs_to  :link
end

class Link
  include DataMapper::Resource
  property  :identifier,  String, :key => true
  property  :created_at,  DateTime 
  has 1, :url
  has n, :visits
end

DataMapper.finalize

url = Url.create(:original => 'http://www.gmail.com')
=> #<Url @id=nil @original="http://www.gmail.com" @link_identifier=nil>
  

Комментарии:

1. По-видимому, мне нужно было бы сначала создать link и link_identifier.

Ответ №1:

В вашей модели Url ссылка является обязательной ассоциацией. Вы не можете создать URL-адрес без ссылки, потому что проверка завершится неудачей. Если вы хотите иметь возможность создавать URL-адреса, не связывая их со ссылкой, вы можете написать belongs_to :link, :required => false