Как вы используете турбокадр, чтобы заменить форму создания объекта частичной демонстрацией объекта?

у меня есть модель subscription_tierс и editдействия с соответствующими представлениями. Я обернул каждый из них турбо-рамой.

<%= turbo_frame_tag subscription_tier do %>

Когда я редактирую существующий уровень подписки и сохраняю его, турбо-кадр обновляется и показывает мой сохраненный уровень, но я не могу воспроизвести это для создания новых уровней.

Моя новая многоуровневая рамка:

      <turbo-frame id="new_tier">
      <%= link_to "Add Tier", new_create_subscription_tier_path(sub_type: "Free"), class: "btn btn-primary mb-3 fs-6"
      %>
 </turbo-frame>

И в new.html.erb

      
    <turbo-frame id="new_tier">
      <%= render partial: "create/subscription_tiers/edit", locals: {
        subscription_tier: @subscription_tier
      } %>
    </turbo-frame>

Нажатие кнопки «Добавить уровень» успешно отображает форму, и я могу сохранить объект, но при сохранении турбо-кадр уничтожается с ошибкой. Response has no matching <turbo-frame id="new_tier"> element

Я знаю, это потому, что мой showчастичное завернуто в <%= turbo_frame_tag subscription_tier do %>, но я не знаю, как примирить это.

2 ответа

Я считаю, что вам нужно добавить тег данных к вашей новой ссылке, т.е.

      <%= link_to "new subscription", subscription_path, data: { turbo_frame: dom_id(Subscription.new) } %>

На той же странице, что и эта ссылка ^^^^ нужно добавить

      <%= turbo_frame_tag Subscription.new %>

Я считаю, что это то, что вы пытаетесь достичь

Существует фантастический учебник, который охватывает все эти вещи, которые бесплатны здесь .

Возможно, ОП понял это, но для тех, кто ищет возможное решение, вы всегда можете установить идентификатор турбокадра вручную, например:

      <!-- new.html.erb, edit.html.erb -->
<%= turbo_frame_tag 'subscription_tier_frame' do %>
  <%-- form for subscription tier -->
<% end %>

и

      <!-- show.html.erb -->
<%= turbo_frame_tag 'subscription_tier_frame' do %>
  <%-- rendered subscription tier -->
<% end %>

Это сохранит все в той же турбораме.

Другие вопросы по тегам