Я только что установил Pundit в своем приложении. Мне удалось реализовать pundit для новых методов создания и показа, однако, когда дело доходит до методов уничтожения и голосования, я получаю следующую ошибку Pundit::NotDefinedError in HairstylesController#upvote unable to find policy `NilClassPolicy` for `nil
вот мое репо для простоты понимания при необходимости: https://github.com/Angela-Inniss/hair-do
Я разрешил два метода 'upvote' и 'destroy' в моем контроллере. Я обновил соответствующую политику. Пожалуйста, смотрите код ниже.
Контроллер с указанными методами:
def destroy
authorize @hairstyle
@hairstyle = Hairstyle.find(params[:id])
@hairstyle.destroy
redirect_to hairstyles_path
end
def upvote
authorize @hairstyle
@hairstyle = Hairstyle.find(params[:id])
@hairstyle.upvote_from current_user
redirect_to hairstyles_path
end
файл pundit policy.rb:
def upvote?
record.user == user
# - record: the restaurant passed to the `authorize` method in controller
# - user: the `current_user` signed in with Devise.
end
def destroy?
record.user == user
end
index.html.erb уничтожить файл html
<% if policy(hairstyle).destroy? %>
<p><%= link_to "Delete", hairstyle_path(hairstyle),method: :delete, data: { confirm: "Are you sure?" }%></p>
<% end %>
index.html.erb файл upvote html (который работал до того, как я добавил pundit)
<%= link_to like_hairstyle_path(hairstyle), method: :put do %>
<i class="fa fa-heart">
<span><%= hairstyle.get_upvotes.size %><span>
</i>
<% end %>
Я бы хотел, чтобы пользователь мог проголосовать за прическу
Я бы хотел, чтобы пользователь мог удалять свои прически.