如何为帖子建立标记系统?

Joe*_*ers 1 ruby-on-rails devise ruby-on-rails-3.1

我一直在试图找出在rails 3.1中构建用户标记系统的最佳方法.我试验了make_flaggable宝石,但它没有给我我需要的东西.

我正在为我的用户模型使用设计,我有一个属于用户的Post模型.我需要能够检索从站点管理员端标记的所有帖子的列表.到目前为止,我很难获得.

我不确定在Flag模型和Post/User模型之间需要使用哪种类型的关系.我一直在阅读多态关系,这看起来很有希望.

任何想法或反馈将不胜感激!

Moh*_*mad 6

推出自己的解决方案非常容易.我会这样做的.

class User 
  has_many :flags
end
class Post 
  has_many :flags
end
class Flag
  belongs_to :user
  belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)

您可以通过浏览标记模型或帖子模型来获取已标记的帖子.

# 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
Run Code Online (Sandbox Code Playgroud)

或者通过标志模型:

flags = Flag.includes(:post).uniq
flags.each do |flag|
  puts flag.post
end
Run Code Online (Sandbox Code Playgroud)

为确保您不会从同一用户在同一帖子上获得重复标记,我将在迁移中添加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
Run Code Online (Sandbox Code Playgroud)