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

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

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

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

类似的模型非常简单:

User_id // current user Post_id // post to associate 

提前致谢!

您应该在用户模型中定义关联

如果它是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 

您想要搜索与user_id和post_id匹配的记录。 如果你找到一个,你想要显示’不同’按钮,b / c表示用户已经“喜欢”了post。 如果你不这样做(它返回nil),你想要显示“喜欢”按钮。

如果用户没有“喜欢”post,则以下方法返回nil,如果用户“喜欢”post,则返回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 

您也可以像这样为Like模型添加validation:

 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 

在你的post控制器中创建这样的动作。

 def unlike # get the post #code to decrement the like counter of a specific post end 

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