2

Sinatra、Mongoid 3

4つのモデルがあります:User, Book, FavoriteBooks, ReadBooks, NewBooks。各ユーザーは、お気に入り、読んだ本、新しい本のリストを持っています。本はリストに属しています。ただし、本をに埋め込まないようにするために、本に関する情報を要求することもできFavoriteBooks, ReadBooks, NewBooksます。

スキームの一部:

class Book
 include Mongoid::Document
 belongs_to :favourite_books
 belongs_to :read_books
 belongs_to :new_books 
end

class FavoriteBook
 include Mongoid::Document
 has_many :books
end

#.... the same for ReadBooks and NewBooks


class User
 include Mongoid::Document
 # what else?
end

何かが足りなかったようです。

ユーザーにリストを「含ませる」にはどうすればよいFavoriteBooks, ReadBooks, NewBooksですか?1対1の関係を使用する必要がありますか?

4

1 に答える 1

0

モデリングを考え直すべきだと思います。私見では、モデルとしての本とユーザーである必要があり、favorite_books、read_books、new_booksはすべて次のような関係である必要があります。

class User
 include Mongoid::Document
 has_many :favorite_books
 has_many :read_books
 has_many :new_books

 has_many :books, :through => :favorite_books
 has_many :books, :through => :read_books
 has_many :books, :through => :new_books
end

class Book
 include Mongoid::Document
 has_many :favorite_books
 has_many :read_books
 has_many :new_books

 has_many :users, :through => :favorite_books
 has_many :users, :through => :read_books
 has_many :users, :through => :new_books 
end

class FavoriteBook
 include Mongoid::Document
 belongs_to :books
 belongs_to :users
end

#.... the same for ReadBooks and NewBooks

これはより良いアプローチだと思います。=)

于 2012-11-09T15:09:17.957 に答える