[英]How can I build a flagging system for posts?
我一直在嘗試找出在Rails 3.1中構建用戶標記系統的最佳方法。 我嘗試了make_flaggable
gem,但沒有滿足我的需求。
我正在為用戶模型使用devise,並且有一個屬於用戶的Post模型。 我需要具有檢索從網站管理員端標記的所有帖子的列表的功能。 到目前為止,我很難做到這一點。
我不確定在Flag模型和Post / User模型之間需要使用哪種類型的關系。 我一直在閱讀多態關系,這看起來很有希望。
任何想法或反饋將不勝感激!
推出自己的解決方案非常容易。 我會這樣做。
class User
has_many :flags
end
class Post
has_many :flags
end
class Flag
belongs_to :user
belongs_to :post
end
您可以通過標記模型或帖子模型來獲取已被標記的帖子。
# since a post has many flags
# you will get duplicates for posts flagged more than once
# unless you call uniq
flagged_posts = Post.joins(:flags).uniq
或通過標志模型:
flags = Flag.includes(:post).uniq
flags.each do |flag|
puts flag.post
end
為了確保您不會在同一用戶的同一帖子上收到重復的標志,我將在遷移中添加一個uniq索引:
def change
create_table :flags do |t|
t.belongs_to :user, null: false
t.belongs_to :post, null: false
t.timestamps
end
add_index :flags, [:user_id, :post_id], unique: true
end
也許我誤會了您要做什么,但是為什么不只在您的Posts表中添加一個稱為“ flagged”的列呢? 然后,您可以只執行User.posts(:where =>:flagged => true)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.