微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?

如何解决如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?

我正在关注 this tutorial 以实现用户可以提交琐事/有趣事实的功能

我想将(编辑/删除功能限制为每个项目的管理员或作者。

我在 .application_controller 中创建了一个辅助类

def author_of?(resource)
user_signed_in? && current_user.id == resource.user_id
end

但是当我在带有 Hotwire 的 Turbo-frame 中使用它时,我收到此错误

| ActionView::Template::Error(设计无法在您的请求环境中找到 Warden::Proxy 实例。

这是我的代码供参考

index.html

<%= turbo_stream_from @stadium,:trivia %>
<%= tag.div id: "#{dom_id(@stadium)}_trivia" do %>
    <%= render partial: "trivia/trivium",collection: @stadium.trivia %>
<% end %>
<% end %>

_trivium.html.erb

<%= turbo_frame_tag trivium do %>

<%= trivium.body %>

<% if author_of?(trivium) || admin? %>
<%= button_to "Delete",trivium_path(trivium),class: "btn btn-small btn-danger btn-link mr-2",method: :delete,data: { confirm: "Are you sure?" } %>
<% end %>

<% end %>

如何访问评论部分中的 current_user 助手以检查 current_user 是作者还是管理员(并且应该允许删除/编辑)?

解决方法

这个错误的原因是,正如前面提到的 here,带有 Turbo 帧的部分在没有任何可用的全局助手的情况下被渲染。

那个 SO 问题指向了一个 Hotwire 论坛 here,他们在那里讨论了可能的解决方案。我认为最好的描述是here

要点是:

  • 将 current_user 作为参数传递给您的部分,而不是从您的部分中访问它
  • 在部分而不是助手中进行权限检查
<%= render partial: "trivia/trivium",collection: @stadium.trivia,user: current_user %>

您也可以考虑将您的 author_of 方法转换为模型方法,然后您可以选择在您的部分中使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?