【问题标题】:Trouble Routing to active_storage_attachments路由到 active_storage_attachments 的问题
【发布时间】:2021-04-23 23:58:41
【问题描述】:

为活动存储附件实现拖放。一些代码来自 goRails,一些来自我的大脑/网络。

因为我们要订购附件,所以我继续创建了一个模型和控制器来表示它们,因为安装 activestorage 没有。

我正在使用“acts_as_list”,因此需要一个模型来添加acts_as_list 钩子。

所以我有:

models/active_storage_attachment.rb

class ActiveStorageAttachment < ApplicationRecord
 acts_as_list
end

控制器/active_storage_attachments_controller.rb

class ActiveStorageAttachmentsController < ApplicationController
  before_action :set_active_storage_attachment, only: [:move]

  def move
    @active_storage_attachment.insert_at(params[:position].to_i)
    head :ok
  end

  private
  
  def set_active_storage_attachment
    @active_storage_attachment = ActiveStorageAttachment.find(params[:id])
  end

end

我还添加了一条路线:

  resources :active_storage_atachments do
    member do
      patch :move
    end
  end

sortablejs通过js调用ajax请求的路由很简单。

电话最终是这样的:

https://myamazonurl.com/active_storage_attachments/96/move

Rails 告诉我不存在路线,但如果我运行 rails 路线,我会看到该死的路线。

move_active_storage_attachment_path PATCH   /active_storage_attachments/:id/move(.:format)  
active_storage_attachments#move

我认为这只是我麻烦的开始,但我无法弄清楚为什么最简单的部分,即路线,不起作用。

【问题讨论】:

    标签: ruby-on-rails rails-activestorage sortablejs


    【解决方案1】:

    因为我们要订购附件,所以我继续创建了一个模型和控制器来表示它们,因为安装 activestorage 没有。

    错误。 ActiveStorage 有一个名为 ActiveStorage::Attachment 的模型。该模型存在于 Rails gem 中,而不是您的应用程序代码中。我不建议添加您自己的 ActiveStorageAttachment 模型,因为这似乎是对错误和混乱的公开邀请 - 特别是当所有宏都设置与 ActiveStorage::Attachment 的关联时。

    在某些情况下,如果您需要在附件中添加大量业务逻辑,您实际上可能缺少中间模型:

    class Sortable < ApplicationRecord
      has_one_attached :file
      belongs_to :listable, polymorphic: true
      accepts_nested_attributes_for :file
      acts_as_list
      delegate :service_url, # ...
        to: :file
      def move
         #...
      end
    end
    

    我通常建议不要在active_storage_attachments 和猴子补丁ActiveStorage::Attachment 中添加列。

    我认为这只是我麻烦的开始,但我无法弄清楚为什么最简单的部分,即路线,不起作用。

    我的猜测是您没有使用正确的 HTTP 方法。您想使用带有 _method=PATCH 参数的 POST 请求或本机 PATCH 请求。检查您的日志。

    我建议您在进行 JS 集成之前进行集成测试(RSpec 中的请求规范),因为您希望确保服务器端在开始从两端解决问题之前按预期工作。

    【讨论】:

    • 真的很感激这个......我显然已经偏离了道路。搜索我可能没有很多关于如何向这些附件添加可排序功能的见解。我正在努力了解如何直接与附件模型交互......例如更新我添加的新“位置”字段。知道如何以负责任的方式与 ActiveStorage::Attachment 模型交互吗?
    • 这是我在完成其中一些工作后的问题。在不直接编辑 Gem 的情况下将acts_as_list 添加到 activeStorage::Atachment 模型的最佳实践是什么?我想添加到其控制器的新方法也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2017-03-26
    • 2017-11-12
    • 2018-09-30
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多