【问题标题】:How to access current_user helper with Hotwire & Turbo.js?如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?
【发布时间】:2021-05-17 17:21:22
【问题描述】:

我正在关注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 是作者还是管理员(并且应该允许删除/编辑)?

【问题讨论】:

    标签: ruby-on-rails hotwire-rails turbo


    【解决方案1】:

    正如here 所提到的,此错误的原因是,在没有任何可用的全局帮助程序的情况下呈现带有 Turbo 帧的部分。

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

    要点是:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 2010-09-30
      • 2021-05-29
      • 2013-06-18
      • 1970-01-01
      • 2015-01-29
      • 2016-06-24
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多