该网站是一个简单的社区,每个用户都可以创建帖子,用户可以“喜欢”他们或“不喜欢”他们。
我有一个Post和Like模型。目前,我通过post.likes.size列出所有帖子以及每个帖子的大小。喜欢帖子的按钮也有效。
我不知道怎么做是如何根据情况,如果帖子应该显示不同的按钮等(取决于current_user是否已经喜欢该帖子)。
类似的模型非常简单:
User_id // current user
Post_id // post to associate
提前致谢!
答案 0 :(得分:5)
您应该在用户模型中定义关联
如果它是ror 2. *在用户模型中添加方法。它应该是这样的:
has_many :likes
def already_likes?(post)
self.likes.find(:all, :conditions => ['post_id = ?', post.id]).size > 0
end
假设Like有字段user_id和post_id 当然还在视野中
if current_user.already_likes?(@post)
#add unlike button
end
答案 1 :(得分:1)
您想要搜索与user_id和post_id匹配的记录。如果你找到一个,你想要显示'不同'按钮,b / c表示用户已经“喜欢”了帖子。如果你不这样做(它返回nil),你想要显示“喜欢”按钮。
如果用户没有“喜欢”帖子,则以下方法返回nil,如果用户“喜欢”帖子,则返回nil。
def user_likes(current_user, post_id)
likes.find(:first, :conditions => ['user_id = ? AND post_id = ?', current_user, post_id] ).nil?
end
所以你可以说:
if user_likes(1, 12).nil?
# show like button
else
#show unlike button
end
答案 2 :(得分:1)
你也可以像你这样在你的Like模型中添加验证:
validate :user_does_not_already_like_post
def user_does_not_already_like_post
errors.add(:user, "You can only like a post once.") if user.already_likes?(post)
end
答案 3 :(得分:0)
在帖子控制器中创建这样的动作。
def unlike
# get the post
#code to decrement the like counter of a specific post
end
然后从您的视图中,创建一个指向此操作的按钮或链接。