如果用户投票选择照片,我想进行一些样式更改,并且我使用了此代码(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
这有什么不对?
答案 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模式,那么重新考虑你正在做的事情。您可能需要将代码分解为辅助方法等。