У меня есть оператор if, который отображает определенную ссылку в зависимости от того, проголосовал ли пользователь за что-то или нет. Однако я получу сообщение об ошибке, если пользователь не вошел в систему, поскольку current_user будет равен нулю. Я использую устройство для аутентификации.
неопределенный метод voted_as_when_voted_for для nil: 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 %>
Что я могу добавить к этому оператору if для отображения одной из ссылок, даже если пользователь не вошел в систему, без повторения кода link_to. Использование методологии DRY Rails. (если пользователь не вошел в систему и нажимает ссылку «Нравится / Не нравится», он попросит его войти в систему, поскольку мои маршруты настроены следующим образом:
before_action :authenticate_user!, except: [:index, :show]
2 ответа
Попробуй это:
<% 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 %>
В твоем случае:
<% if signed_in? && current_user.voted_as_when_voted_for @pin %>
...
<% end %>
Предполагая, что вы используете devise, поскольку вы включили Authenticate_user! метод.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.