Добавление кнопки «Мне нравится / нет» к записи в Rails - PullRequest
3 голосов
/ 11 октября 2010

Сайт - это простое сообщество, в котором каждый пользователь создает сообщения, и пользователи могут «им понравиться» или «не понравиться».

У меня есть пост и понравившаяся модель.В настоящее время я перечисляю все посты, а также размер лайков для каждого поста через post.likes.size.Кнопка лайка поста также работает.

Что я не знаю, как это сделать, так это как в зависимости от случая, если пост должен показывать кнопку непохожих или тому подобное (в зависимости от того, уже текущий current_userпонравился этот пост).

Подобная модель очень проста:

User_id // current user
Post_id // post to associate

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 12 октября 2010

Вы должны определить ассоциацию в пользовательской модели

, если это 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 голос
/ 12 октября 2010

Также вы можете добавить валидацию к вашей модели 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
1 голос
/ 12 октября 2010

Вы хотите найти запись, которая соответствует user_id и post_id. Если вы найдете его, вы хотите показать кнопку «непохожая», b / c, которая означает, что пользователю «понравилась» запись. Если вы этого не сделаете (возвращает ноль), вы хотите показать кнопку «Мне нравится».

Следующий метод возвращает 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
0 голосов
/ 11 октября 2010

создайте подобное действие в вашем контроллере сообщений.

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

затем, с вашей точки зрения, создайте кнопку или ссылку, указывающую на это действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...