【发布时间】:2019-04-28 13:04:42
【问题描述】:
我刚刚在我的应用程序上安装了 Pundit。我已经设法为新的 create 和 show 方法实现 pundit,但是当涉及到我的 destroy 和 up vote 方法时,我收到以下错误Pundit::NotDefinedError in HairstylesController#upvote unable to find policy `NilClassPolicy` for `nil
这里是我的 repo,以便在需要时便于理解: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
权威策略.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 文件支持 html(在我添加 pundit 之前有效)
<%= link_to like_hairstyle_path(hairstyle), method: :put do %>
<i class="fa fa-heart">
<span><%= hairstyle.get_upvotes.size %><span>
</i>
<% end %>
我希望用户能够为发型投票 我希望用户能够删除他们的头发。
【问题讨论】:
标签: ruby-on-rails ruby pundit