我有一个Bookmark
模型。我想要一个List
模型。所以我的用户可以创建书签列表。
我用这个命令
创建了一个List
脚手架
rails generate scaffold List title:string
有人可以帮我创建List Bookmark关系吗?
如果你能给我一些学习资源,那就太棒了。
- 书签可以包含多个列表
醇>
让我们说我为http://stackoverflow.com
添加了书签。并说我有两个列表:
然后我应该可以将我的书签添加到两个列表中。
所以我猜A Bookmark can have many lists
是一个有效的陈述。
答案 0 :(得分:32)
应用/模型/ Bookmark.rb 强>
class Bookmark < ActiveRecord::Base
has_and_belongs_to_many :lists
end
应用/模型/ List.rb 强>
class List < ActiveRecord::Base
has_and_belongs_to_many :bookmarks
end
创建新迁移
rails generate migration CreateJoinTableListBookmark List Bookmark
<强>迁移强>
rake db:migrate
答案 1 :(得分:2)
尚未测试过,但这就是它的工作原理
class Bookmark < ActiveRecord::Base
has_and_belongs_to_many :bookmark_lists
end
class BookmarkList < ActiveRecord::Base
has_and_belongs_to_many :bookmarks
end
您需要为每个迁移和桥接表的迁移(我假设您想要书签和列表的标题):
rails generate model Bookmark title
rails generate model BookmarkList title
rails generate model BookmarkListsBookmarks bookmark_list_id:integer bookmark_id:integer
如果它想要发送错误,不确定是否想要BookmarkListsBookmarks或BookmarksBookmarkLists,只需尝试另一个。
答案 2 :(得分:2)
我认为有很多关系。
解决这个问题。将创建一个新模型ListBookmark。
ListBookmark基本属性: LIST_ID bookmark_id
根据要求可以添加更多属性。
class List < ActiveRecord::Base
attr_accessible :title
has_many :list_bookmarks
has_many :bookmarks, through: :list_bookmarks
end
class ListBookmark < ActiveRecord::Base
attr_accessible :bookmark_id, :list_id
belongs_to :list
belongs_to :bookmark
end
class Bookmark < ActiveRecord::Base
attr_accessible :title
has_many :list_bookmarks
has_many :lists, through: :list_bookmarks
end
答案 3 :(得分:1)
有两种型号Bookmark和List。
是多对多关系的案例。
要解决这个问题,将会引入一个模型(ListBookMark)来解决多对多关系。
ListBookmark属性:
LIST_ID bookmark_id
根据要求可能有更多属性。
class List < ActiveRecord::Base
attr_accessible :title
has_many :list_bookmarks
has_many :bookmarks, through: :list_bookmarks
end
class ListBookmark < ActiveRecord::Base
attr_accessible :bookmark_id, :list_id
belongs_to :list
belongs_to :bookmark
end
class Bookmark < ActiveRecord::Base
attr_accessible :title
has_many :list_bookmarks
has_many :lists, through: :list_bookmarks
end
我认为解决这个问题会有所帮助。
阅读关系click here