gpt4 book ai didi

ruby-on-rails - 在 Rails 中搜索多态关联

转载 作者:行者123 更新时间:2023-12-04 06:32:07 26 4
gpt4 key购买 nike

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

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

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

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

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

我收到“用户”的无方法错误

我如何访问书签的所有者,以确定当前用户是否已将页面添加为书签?

谢谢。

最佳答案

我会从用户的角度来处理这个问题:

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

我还建议您向书签模型添加一个验证,以防止用户对同一篇文章添加两次书签。

关于ruby-on-rails - 在 Rails 中搜索多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com