我一直在努力找出在rails 3.1中构建用户标记系统的最佳方法。我尝试了make_flaggable
宝石,但它没有给我我需要的东西。
我正在为我的用户模型使用设计,我有一个属于用户的Post模型。我需要能够检索从站点管理员端标记的所有帖子的列表。到目前为止,我很难获得。
我不确定在Flag模型和Post / User模型之间需要使用哪种类型的关系。我一直在阅读多态关系,这看起来很有希望。
非常感谢任何想法或反馈!
答案 0 :(得分:6)
推出自己的解决方案非常容易。我会这样做。
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
答案 1 :(得分:1)
也许我误解了你要做的事情,但为什么不在你的帖子表中添加一个名为“已标记?”的列。然后你可以做User.posts(:where =>:flagged => true)。