簡體   English   中英

如何為帖子建立標記系統?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM