【问题标题】:ActiveSupport::MessageVerifier::InvalidSignature Error with Rails SortableRails 可排序的 ActiveSupport::MessageVerifier::InvalidSignature 错误
【发布时间】:2020-05-28 05:24:52
【问题描述】:

我正在使用rails sortable gem 创建一个通过拖放对goodies 进行排序的表。

我遵循了文档并在我看来得到了这个:

<main class="container-fluid px-5">
  <header class="text-center">
    <h1 class="thin uppercase">Store Manager</h1>
  </header>

  <section>
    <h2 class="color-spouse font-weight-bold">Product Categories (Goodies)</h2>
    <table id="selectedColumn" class="table table-striped table-bordered table-sm" cellspacing="0" width="100%">
      <thead>
        <tr>
          <th></th>
          <th>Order</th>
          <th>Category</th>
          <th># Free</th>
          <th># Paid</th>
          <th>Actions</th>
        </tr>
      </thead>
      <tbody class="sortable">
        <% @goodies.each do |g, sortable_id| %>
          <tr id="<%= sortable_id %>">
            <td class="min"><i class="fas fa-grip-lines"></i></td>
            <td class="min"><%= g.sort %></td>
            <td><%= g.name %></td>

            <% free = Variation.where(goody_id: g.id).where(price: 0).count %>
            <td><%= free %></td>

            <% paid = Variation.where(goody_id: g.id).where.not(price: 0).count %>
            <td><%= paid %></td>

            <td class="min">
              <%= link_to '<i class="fas fa-pencil-alt"></i>'.html_safe, edit_goody_path(g), class: "grey-text" %>
              <%= link_to '<i class="fas fa-trash"></i>'.html_safe, g, method: :delete, data: { confirm: 'Are you sure?' }, class: "grey-text" %>
            </td>
          </tr>
        <% end %>
      </tbody>
    </table>
  </section>

</main>




<%= content_for :additional_js do %>
  <script>
    $(document).ready(function() {
      $(function() {
        $('.sortable').railsSortable();
      });
    })
  </script>
<% end %>

我的控制器中有这个:

def store_manager
    @goodies = Goody.order(:sort).all
    @variations = Variation.order(:sort).all
  end

它确实可以按预期拖放。但是,当我这样做时,会出现此服务器错误:

Started POST "/sortable/reorder" for ::1 at 2020-05-18 21:13:47 -0700
Processing by SortableController#reorder as JSON
  Parameters: {"rails_sortable"=>["", "", ""], "sortable"=>{"rails_sortable"=>["", "", ""]}}
   (0.2ms)  BEGIN
  ↳ /Users/lizbayardelle/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.4.2/lib/active_record/log_subscriber.rb:98
   (0.2ms)  ROLLBACK
  ↳ /Users/lizbayardelle/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.4.2/lib/active_record/log_subscriber.rb:98
Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.4ms)



ActiveSupport::MessageVerifier::InvalidSignature - ActiveSupport::MessageVerifier::InvalidSignature:

然后当我刷新页面时,新订单没有保存。

我看不出这与 activerecord 有什么关系,因为其中大部分是用于 blob 和文件存储。谁能看到为什么会触发此错误?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我遇到了类似的 blob 错误!

    就我而言, 我有一个Profile 和个人资料has_one_attached :profile_image

    我在更改配置文件对象并尝试获取profile_imageblob_url 时遇到此错误。

    这是因为在后端 rails 对每个对象进行签名,当它尝试获取 blob_url 时,签名已更改,因为我在同一对象上调用了 assign_attributes

    所以我不得不将这两个 API 调用分开。它解决了我的问题。

    在你的情况下, 我猜它正在尝试更新数据库中的列并获取记录(现在已更改)。

    我知道,这不是直接的答案,但您可以沿着这条路线找到您的解决方案。

    【讨论】:

    • 感谢 Sandip 的回答,正是我也在做同样的事情,但它对我不起作用。所以,我现在为此创建了一个虚拟列。它工作正常。关键是您无法修改从中获取数据的同一字段以创建或编辑 rails admin 的方法。
    • 你有解决方法的代码吗?非常感谢。
    【解决方案2】:

    您似乎没有将 ID 提交到后端(您可以通过 rails_sortable 哈希中的 rails_sortable 数组在日志输出中包含空白字符串这一事实来判断)。您所缺少的似乎只是将@goodies.each 替换为@goodies.each_with_sortable_id(如文档所述)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多