处理对资源的 ActiveStorage 附件所做的编辑的 Rails 方式是什么?



我第一次尝试ActiveStorage,想知道用于清除资源的部分或全部附加文件的控制器代码的约定是什么?

两个解决方案我可以看到,但讨厌:

  1. 仅用于管理附件的指定控制器(将省略任何类型的资源特定回调(
  2. 在每个资源控制器中,为destroy方法添加某种逻辑

Rails处理对资源的ActiveStorage附件进行编辑的方式是什么?

我会选择您考虑的第一个解决方案:

仅用于管理附件的指定控制器(它将省略任何类型的资源特定回调

这大致是我们在Basecamp中所做的。这里有一个演示:

# app/models/event.rb
class Event < ApplicationRecord
belongs_to :user
has_many_attached :highlights
end
# app/controllers/events/highlights_controller.rb
class Events::HighlightsController < ApplicationController
before_action :set_event, :set_highlight
def destroy
@highlight.purge_later
redirect_to @event
end
private
def set_event
@event = Current.user.events.find(params[:event_id])
end
def set_highlight
@highlight = @event.highlights.find(params[:id])
end
end
# config/routes.rb
Rails.application.routes.draw do
resources :events do
resources :highlights, controller: "events/highlights"
end
end
<%# app/views/events/show.html.erb %>
<% @event.highlights.each do |highlight| %>
<%= link_to image_tag(highlight.representation(resize: "200x200>")), highlight %><br>
<%= link_to "Delete this highlight", event_highlight_path(@event, highlight), method: :delete %>
<% end %>

最新更新