2010-10-19 101 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 

我也建議你驗證添加到防止用戶書籤同一職位的兩倍書籤模型。