在Rails中的帖子中添加“Like / Different”按钮

时间:2010-10-11 18:15:26

标签: ruby-on-rails ruby

该网站是一个简单的社区,每个用户都可以创建帖子,用户可以“喜欢”他们或“不喜欢”他们。

我有一个Post和Like模型。目前,我通过post.likes.size列出所有帖子以及每个帖子的大小。喜欢帖子的按钮也有效。

我不知道怎么做是如何根据情况,如果帖子应该显示不同的按钮等(取决于current_user是否已经喜欢该帖子)。

类似的模型非常简单:

User_id // current user
Post_id // post to associate

提前致谢!

4 个答案:

答案 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

然后从您的视图中,创建一个指向此操作的按钮或链接。