检查用户投票是否可以投票

时间:2014-11-10 18:12:33

标签: ruby-on-rails

如果用户投票选择照片,我想进行一些样式更改,并且我使用了此代码(acts_as_votable docs):

  <% if current_user.voted_for? @photo %>
    <%= link_to like_photo_path(@photo), method: :put do %>
        <button>
        ¡Liked!
        </button>
    <% end %>
  <% else %>
    You dont like it yet
  <% end %>

但这不会起作用,因为它会表现出来#34;喜欢&#34;所有的时间,即使我没有点击“赞”按钮。

照片控制器

def upvote
    @photo = Photo.friendly.find(params[:id])
    @photo.liked_by current_user
    redirect_to user_photo_path(@photo.user,@photo)
end

这有什么不对?

1 个答案:

答案 0 :(得分:3)

在if语句中添加其他条件

<% if current_user.voted_for? @photo && @photo.liked_by current_user %>
    # different text
<% elsif current_user.voted_for? @photo %>
  <%= link_to like_photo_path(@photo), method: :put do %>
    <button>
    ¡Liked!
    </button>
  <% end %>
<% else %>
  You dont like it yet
<% end %>

这是一种非常常见的设计模式,基本上属于下一个逻辑默认值。

请注意,如果您发现自己正在筑巢&#34;如果&#34;陈述,如此

if condition_one
  if condition_two
    if condition_three
      # do something
else
 # do something else
end 

这与

相同
if condition_one && condition_two && condition_three
  # do something
else 
  # do something else
end

如果你发现自己陷入了嵌套的ifs模式,那么重新考虑你正在做的事情。您可能需要将代码分解为辅助方法等。