Ruby on rails 尝试使用权威使用户授权更加枯燥

Ruby on rails 尝试使用权威使用户授权更加枯燥,ruby-on-rails,ruby,pundit,Ruby On Rails,Ruby,Pundit,我正在使用pundit在ruby on rails应用程序中处理授权,我想看看登录的用户是否可以在显示帖子、评论等的删除和编辑按钮之前进行调节 以下是帖子策略、评论策略等的原始工作方法 def destroy user.present? && (user == record.user || user.role?(:admin) || user.role?(:moderator)) end 下面是我添加到应用程序策略中的新方法 def can_moderate?(u

我正在使用pundit在ruby on rails应用程序中处理授权,我想看看登录的用户是否可以在显示帖子、评论等的删除和编辑按钮之前进行调节

以下是帖子策略、评论策略等的原始工作方法

 def destroy
   user.present? && (user == record.user || user.role?(:admin) || user.role?(:moderator))
 end
下面是我添加到应用程序策略中的新方法

  def can_moderate?(user, record)
    @user = user
    @record = record
    user == record.user || user.role?(:admin) || user.role?(:moderator)
  end
这是我正在制定的政策

  def destroy?
    user.present? && user.can_moderate?
  end
这个干衣机版本给了我一个未定义的错误方法。 有什么想法吗

谢谢

编辑以添加完整错误

ActionView::Template::Error (undefined method `can_moderate?' for #<User:0xb5671e60>):
14:     <% if policy(@post).edit? %>
15:       <%= link_to "Edit", edit_topic_post_path(@topic, @post), class: 'btn btn-success' %>
16:     <% end %>
17:     <% if policy(@post).destroy? %>
18:       <%= link_to "Delete", [@topic, @post], method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this topic?' } %>
19:     <% end %>
20:   </div>
app/policies/post_policy.rb:7:in `destroy?'
app/views/posts/show.html.erb:17:in `_app_views_posts_show_html_erb___159039275__620331048'
ActionView::Template::Error(对于#未定义的方法'can#u mediate'):
14:     
15:       
16:     
17:     
18:       
19:     
20:   
app/policies/post_policy.rb:7:in'destroy'
app/views/posts/show.html.erb:17:in``在app\u views\u posts\u show\u html\u erb\u 159039275\u 620331048'
Tien

不要在用户对象上调用
can\u mediate?
。它将假定用户类/模型中存在
can\u mediate?
。相反,只需调用方法,因为在同一文件/控制器中存在

  def destroy?
    user.present? && can_moderate?
  end
你也可以吃你的罐头吗?方法只是

  def can_moderate?(user, record)
    user == record.user || user.role?(:admin) || user.role?(:moderator)
  end
烘干机版本

# policy file
def destroy?
  can_moderate?
end

def can_moderate?(user, record)
  user.present? && user == record.user ||
                   user.role?(:admin)  || user.role?(:moderator)
end

我建议您继续并将整个错误粘贴到这里。从问题的描述中,您得到了
can\u mediate
的未定义错误,但方法名称为
can\u mediate?
。你在哪里有提到的方法?同一份文件?啊,现在拿到了。出于某种原因,我认为我需要对特定的用户调用它。因此,自从我使用Desive以来,它对当前的_用户起到了神奇的作用。谢谢由于应用程序策略中存在
can\u mediate?
,因此它不应该有参数,事实上,对于预期为2但得到0的代码,它将抛出
ArgumentError
。这些变量可通过
attr\u accessor
方法获得。