2010-10-19 158 views
3

我需要在我的应用程序中允许用户为帖子添加书签。他们应该只能为每个帖子创建一个书签。我已经建立了像我这样的多态关联:在Rails中搜索多态关联

class Post < ActiveRecord::Base 
    has_many :bookmarks, :as => :bookmarkable 
end 

class Bookmark < ActiveRecord::Base 
    belongs_to :bookmarkable, :polymorphic => true 
    belongs_to :user 
end 

class User < ActiveRecord:Base 
    has_many :posts 
    has_many :bookmarks 
end 

在我看来,用户可以创建书签。如果用户已经为特定的帖子添加了书签,我想找到一些方法用“删除书签”代码替换“创建书签”视图代码。

如果我尝试做这样的事情:

@post = Post.find(params[:id, :include => [:bookmarks]]) 
- if @post.bookmarks.users.include?(@user) 

我得到一个无方法错误“用户”

如何访问书签的业主,以确定当前用户已经为书签添加了书签?

谢谢。

回答

2

我但从用户的角度接近这个:

class User < ActiveRecord::Base 
    has_many :posts 
    has_many :bookmarks 

    # Rails 3 
    def bookmarked?(post) 
    bookmarks.where(
     { 
     :bookmarkable_id => post.id, :bookmarkable_type => post.class.name 
     } 
    ).count > 0 
    end 

    # Rails 2 
    def bookmarked?(post) 
    bookmarks.find(:all, :conditions => 
     { 
     :bookmarkable_id => post.id, :bookmarkable_type => post.class.name 
     } 
    ).count > 0 
    end 
end 

if @user.bookmarked?(@post) 
    # Show delete link 
else 
    # Show bookmark link 
end 

我也建议你验证添加到防止用户书签同一职位的两倍书签模型。