我有一个if语句,如果用户投票或不投票,则显示某些链接。但是,如果用户未登录,我将收到错误,因为current_user将为nil。我正在使用设计进行身份验证。
未定义的方法`voted_as_when_voted_for'为零:NilClass
<% if current_user.voted_as_when_voted_for @pin %>
<%= link_to dislike_pin_path(@pin), method: :put, class: "btn btn-default" do %>
<span class="glyphicon glyphicon-heart"></span> <%= @pin.get_upvotes.size %>
<% end %>
<% else %>
<%= link_to like_pin_path(@pin), method: :put, class: "btn btn-default" do %>
<span class="glyphicon glyphicon-heart"></span>
<%= @pin.get_upvotes.size %>
<% end %>
<% end %>
<%= link_to pins_path, class: "btn btn-default" do %>
<span class="glyphicon glyphicon-step-backward"></span>
Back
<% end %>
<% if user_signed_in? %>
<%= link_to "Edit", edit_pin_path, class: "btn btn-default" %>
<%= link_to "Delete", pin_path, method: :delete, data: { confirm: "Are you sure"}, class: "btn btn-default" %>
<% end %>
即使用户未登录而没有重复link_to代码,我还可以添加if if语句来显示其中一个链接。使用DRY Rails方法。 (如果用户没有登录并点击喜欢/不喜欢链接,它会要求他登录,因为我的路由设置如下:
before_action :authenticate_user!, except: [:index, :show]
答案 0 :(得分:1)
试试这个:
<% if current_user && current_user.voted_as_when_voted_for @pin %>
... code here
<% else %>
<%= link_to like_pin_path(@pin), method: :put, class: "btn btn-default" do %>
<span class="glyphicon glyphicon-heart"></span>
<%= @pin.get_upvotes.size %>
<% end %>
<% end %>
答案 1 :(得分:0)
在你的情况下:
<% if signed_in? && current_user.voted_as_when_voted_for @pin %>
...
<% end %>
假设您使用了设计,因为您包含了authenticate_user!方法