Joe*_*ers 1 ruby-on-rails devise ruby-on-rails-3.1
我一直在试图找出在rails 3.1中构建用户标记系统的最佳方法.我试验了make_flaggable
宝石,但它没有给我我需要的东西.
我正在为我的用户模型使用设计,我有一个属于用户的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
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)
归档时间: |
|
查看次数: |
644 次 |
最近记录: |