我想做一個應用程序,但我堅持如何設計模型。到目前爲止,我有這些型號:User
,Post
,Tag
,Like
,Comment
。我爲每個模型,控制器,視圖和遷移文件創建。到目前爲止好,但現在我的問題是我應該做他們之間的關係或創建這些模型:PostTag
,PostLike
, PostComment
。你知道,他們之間只有這些關係,所以當某個人在帖子中刪除了一個標籤時,他實際上只是刪除了關係而不是標籤本身,因爲標籤可能在另一個帖子中使用。Rails模型:如何做關係
1
A
回答
0
你不需要單獨的關係模型。只需將has_many
和belongs_to
添加到現有模型中,並將所需字段(post_id,user_id等)添加到數據庫表中即可。
如果您不會爲標記銷燬編寫代碼,那麼當您從帖子中刪除標記時,標記不會消失。本身沒有任何反應。
P.S.我建議使用acts-as-taggable-on gem代碼
0
您只需要添加Tagging
模型,並使用多態關聯來處理Likes
。所以,你需要一個User
,Post
,Comment
,Like
,Tag
和Tagging
您將不再需要爲標籤或引用的Tagging控制器或喜歡
如果你想users
能夠創造posts
和comments
爲以及like
都posts
和comments
,那麼這裏就是來配置你的模型的一種方法:
用戶模式:
class User < ActiveRecord::Base
has_many :posts
has_many :comments
has_many :likes, as: :likeable, dependent: :destroy
end
Post模型:
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments
has_many :likes, as: :likeable, dependent: :destroy
has_many :taggings
has_many :tags, through: :taggings
def self.tagged_with(name)
Tag.find_by_name!(name).posts
end
def self.tag_counts
Tag.select("tags.*, count(taggings.tag_id) as count").
joins(:taggings).group("taggings.tag_id")
end
def tag_list
tags.map(&:name).join(", ")
end
def tag_list=(names)
self.tags = names.split(",").map do |n|
Tag.where(name: n.strip).first_or_create!
end
end
end
評價模型:
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
像模型:
class Like < ActiveRecord::Base
belongs_to :likeable, polymorphic: true
end
標籤遷移發生器:
rails g model tag name
標籤型號:
class Tag < ActiveRecord::Base
has_many :taggings
has_many :posts, through: :taggings
end
標記遷移發生器:
rails g model tagging tag:belongs_to post:belongs_to
標籤模型
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :post
end
樁模型假定您的標籤使用的屬性:名稱
爲了訪問您的標記的帖子廣告d這條路
get 'tags/:tag', to: 'posts#index', as: :tag
,改變你的索引操作在您的文章控制器這樣的:
def index
if params[:tag]
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
end
最後,將鏈接添加到您的收藏詢問看法是這樣的:
<%= raw @post.tags.map(&:name).map { |t| link_to t, tag_path(t) }.join(', ') %>
相關問題
- 1. Rails模型關係
- 2. 如何驗證Rails 3關係模型?
- 3. Ruby on Rails模型關係
- 4. Rails的關係模型
- 5. Ember Rails模型關係
- 6. ElevateDB關係模型做和不做
- 7. Ruby On Rails ORM模型關係
- 8. Rails兩種模型之間的關係
- 9. 定義Rails模型的外鍵關係
- 10. Ruby on Rails中的模型關係
- 11. 在rails中驗證模型關係
- 12. Rails的模型的has_many,belongs_to的關係
- 13. Rails中,模型關係問題
- 14. 多個Ruby on Rails模型關係
- 15. Rails模型之間的關係
- 16. Rails的mongoid三模型關係
- 17. 如何在兩個模型之間做兩個has_many/belongs_to關係?
- 18. 關係模型
- 19. Rails中的「關注」和「收藏夾」關係模型---每個關係的主模型或特定模型
- 20. 如何在Rails中爲朋友創建關係模型?
- 21. 如何測試Rails模型關聯
- 22. 關於Rails模型關聯
- 23. 如何在rails中定義關係以便模型可以具有不同類型的關聯模型?
- 24. Django的關係如何映射模型
- 25. 我如何通過關係模型
- 26. 如何找到模型的關係?
- 27. RoR - 模型關係
- 28. RavenDB關係模型
- 29. Django模型關係
- 30. 模型的關係
你能告訴我們你到目前爲止取得的成就?你有沒有遇到任何錯誤?有關模型關係的更多詳細信息,請參閱[本指南](http://guides.rubyonrails.org/association_basics.html)。 – 31piy
您需要一個標籤和標籤模型。但對於喜歡,你可以使用多態關係,以便可以喜歡帖子和評論。哇,真是太棒了! –