我的应用中需要允许用户为帖子添加书签。他们应该只能为每个帖子创建一个书签。我已经建立了我的多态关联:
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)
我为“用户”
收到“无方法”错误如何访问书签的所有者,以确定当前用户是否已为某个页面添加了书签?
谢谢。
答案 0 :(得分: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
我还建议您为书签模型添加一个验证,以防止用户将同一帖子加入书签两次。