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

Ruby on rails 如何为帖子建立标记系统?,ruby-on-rails,devise,ruby-on-rails-3.1,Ruby On Rails,Devise,Ruby On Rails 3.1,我一直在试图找出在Rails3.1中构建用户标记系统的最佳方法。我尝试了make_-flaggablegem,但它没有提供我需要的东西 我正在为我的用户模型使用Desive,我有一个属于用户的Post模型。我需要有能力检索已从网站的管理端标记的所有帖子列表。到目前为止,我很难做到这一点 我不确定在标志模型和Post/用户模型之间需要使用哪种类型的关系。我一直在阅读多态性关系,这看起来很有希望 任何想法或反馈都将不胜感激 推出自己的解决方案非常容易。我会这样做的 class User has

我一直在试图找出在Rails3.1中构建用户标记系统的最佳方法。我尝试了
make_-flaggable
gem,但它没有提供我需要的东西

我正在为我的用户模型使用Desive,我有一个属于用户的Post模型。我需要有能力检索已从网站的管理端标记的所有帖子列表。到目前为止,我很难做到这一点

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


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

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

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模型:

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)。

您是否阅读了使用示例并进行了相应的操作?这正是我想要的。。。谢谢