如果满足条件,如何防止出现在index.html.erb中的按钮

时间:2014-03-24 22:06:50

标签: ruby-on-rails

好的,我在文章index.html.erb

中有这个
<td><%= pluralize(article.likes.count, "like") %></td>
<td><%= button_to '+1', "/articles/#{article.id}/user/#{current_user.id}/like_vote", method: :post %></td>

但如果选民已经喜欢过一篇文章,我如何阻止该按钮出现在index.html.erb中呢?有没有一种简单的方法可以阻止按钮显示在index.html.erb中?

这是ArticlesController中的方法:

def like_vote
  @article = Article.find(params[:id])
  @user_id = params[:user_id]
  likes = Like.where("user_id = ? and article_id = ?", @user_id, @article.id )

  if likes.blank?
    @article.likes.create(user_id: current_user.id)
  end
  redirect_to(article_path)
end

3 个答案:

答案 0 :(得分:1)

<%-unless article.voted?(current_user)%>
<td><%= button_to '+1', "/articles/#{article.id}/user/#{current_user.id}/like_vote", method: :post %></td>
<%- end%>

并在文章模型中制作方法

def voted?(user)
  self.likes.where(user_id:user.id).first.present?
end

答案 1 :(得分:1)

Rails提供optimal wayscope,它是对chainable和{{1}的数据库交互(例如条件,限制或偏移)的一组约束。 }。

将范围添加到reusable模型,如下所示:

Like

更新视图如下:

class Like < ActiveRecord::Base
  scope :voted_count, ->(user_id, article_id) { where("user_id = ? and article_id = ?", user_id, article_id).count }    
end

答案 2 :(得分:0)

您可以在index.html.erb ...

中执行此操作

<td><%= pluralize(article.likes.count, "like") %></td> <td><%= button_to '+1', "/articles/#{article.id}/user/#{current_user.id}/like_vote", method: :post if article.likes.present? %></td>

只需在最后包含条件语句,它将阻止它执行该行。