Rails Hotwire + пространство имен администратора
У меня есть приложение с рельсами 6.1.3.2. Я начинаю переходить на использование hotwire вместо ujs. Мое приложение использует пространство имен администратора, чтобы позволить пользователю вносить изменения, создавать элементы с помощью этого. Пример маршрута ниже -
resources :event_attachments
namespace :admin do
resources :event_attachments
end
При обновлении через панель администратора
event_attachment
,
turbo_stream
не обрабатывает партиал в представлении администратора, вместо этого он ищет
EventAttachmentsController
. Я не уверен, почему он это делает - любые предложения будут оценены.
Администратор:EventAttachmentsController -
def update
if @event_attachment.update(event_attachment_params)
respond_to do |format|
format.turbo_stream do
render turbo_stream: [
turbo_stream.update("flash", partial: "shared/flash", locals: { notice: "Event image updated" }),
turbo_stream.replace(:event_attachments, partial: 'admin/pages/event_attachment', locals: { event_attachment: @event_attachment })
]
end
format.html do
redirect_to edit_admin_event_attachment_path(@event_attachment), notice: 'Event image updated'
end
end
else
render :edit, status: :unprocessable_entity
end
end
Вот образец моей формы в
admin/event_attachments
-
<%= form_for([:admin, event_attachment], :id => dom_id(event_attachment)) do |f| %>
<%= f.text_field :title, :placeholder => "Event image name *" %>
<% end %>
Журнал сервера Rails (в качестве теста я создал партиал в основном представлении event_attachments) —
Started PATCH "/event_attachments/25" for ::1 at 2022-01-03 22:18:53 -0500
Processing by EventAttachmentsController#update as TURBO_STREAM
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "event_attachment"=>{"title"=>"Test Name", "summary"=>"caption"}, "commit"=>"Save Changes", "id"=>"25"}
EventAttachment Load (1.1ms) SELECT `event_attachments`.* FROM `event_attachments` WHERE `event_attachments`.`id` = 25 LIMIT 1
↳ app/controllers/event_attachments_controller.rb:51:in `set_event_attachment'
Rendered event_attachments/_event_attachment.html.erb (Duration: 0.1ms | Allocations: 22)
[ActionCable] Broadcasting to event_attachments: "<turbo-stream action=\"update\" target=\"event_attachment_25\"><template><li id=\"event_attachment_25\">\n hello\n</li>\n</template></turbo-stream>"
Redirected to http://localhost:3000/event_attachments/25
Completed 302 Found in 4ms (ActiveRecord: 1.1ms | Allocations: 1640)
1 ответ
Похоже, проблема здесь в URL-адресе, на который ваша форма отправляет запрос. Если вы посмотрите в журналах, вы увидите, что там говорится об обработке с помощью EventAttachmentsController#update, потому что в вашей форме указан неверный URL-адрес. Я думаю, что вы должны перейти от использования form_for и [] к использованию form_with
<%= form_with(url: admin_event_attachments_path, :id => dom_id(event_attachment)) do |f| %>
<%= f.text_field :title, :placeholder => "Event image name *" %>
<% end %>