Простой пример ассоциации для datamapper? - PullRequest
0 голосов
/ 10 декабря 2011

Мой код ниже

class City
  include DataMapper::Resource

  has n, :forums

  property :id,           Serial
  property :name,         String
  property :parent_state, String
  property :url,          String,  :length => 255
end

class Category
  include DataMapper::Resource

  has n, :forums

  property :id,           Serial
  property :name,         String
  property :url,          String,  :length => 255 
end

class Forum
  include DataMapper::Resource

  belongs_to :city
  belongs_to :category
  has n,     :posts

  property :id,           Serial
  property :rss,          String,  :length => 255
end

class Post
  include DataMapper::Resource

  belongs_to :forum

  property :id,           Serial
  property :title,        String,  :length => 255
  property :date,         Date
  property :time,         Time
  property :body,         Text
  property :url,          String,  :length => 255
  property :email,        String,  :length => 255

end

Я могу легко создать новый Город ... (это внутри цикла, который я не думаю, что вы действительно хотите видеть):

City.create(:parent_state => state, :name => citylink.content, :url => citylink.get_attribute('href'))

но я не могу понять, как создать новый форум (все, что есть на форуме - это свойство RSS).Я пытался написать его 100 различными способами, и он либо выдает ошибку, либо просто не записывает в базу данных, я предполагаю, что не дано никакой ассоциации, поэтому он отказывается писать.

У меня естьочень много читал учебники и рецензии по DM, и я до сих пор не знаю, что буду делать.

Любая помощь очень ценится..

city = City.get(:name => cityname)
Forum.create(:city => city, :rss => "this works now")

1 Ответ

1 голос
/ 10 декабря 2011

Это должно быть просто:

forum = city.forums.create(:rss => "whatever")

Если это не сработает, попробуйте проверить ошибки на наличие признаков чего-то очевидного, что вы пропустили:

forum.errors.full_messages

(при условии, что у вас есть дм-валидации)

РЕДАКТИРОВАТЬ | Кстати, это недействительно:

city = City.get(:name => cityname)

Вы, вероятно, хотите:

city = City.first(:name => cityname)

или

cities = City.all(:name => cityname)

Когда вы используете .get, вы можете передавать только первичный ключ, например:

city = City.get(1)
...