Как я могу использовать инициализированную модель для использования в качестве уникального идентификатора для модального открытия? - PullRequest
1 голос
/ 19 января 2020

У меня есть форма, которая имеет fields_for с несколькими зацикленными записями. Каждая запись использует модальное окно, которое открывается, а затем используется для добавления записи формы. Моя проблема в том, что для того, чтобы открыть модал, мне нужно использовать уникальные идентификаторы. До создания «основной» формы записи у меня нет идентификатора для использования в качестве уникального идентификатора. Я попытался использовать инициализированную версию, которая является уникальной, но она не откроет модель. Я предполагаю, потому что инициализированная запись имеет # в ней ...

У меня это работает, когда создается запись, потому что тогда я могу использовать идентификатор. Но вот моя проблема для инициализированных записей:

Мой контроллер:

@shop_product = ShopProduct.find_or_initialize_by()

Суммированная форма:

<%= form_for @shop_product do |f| %>
    <%= f.fields_for :shop_product_print_files do |ff| %>
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal-<%= "#{ff.object.print_location.id}" %>_<%= "#{@shop_product}" %>"  id="printLocationId_<%= "#{ff.object.print_location.id}" %>(<%="#{ff.object.print_location.id}"%>)">
        Choose Image
    </button>
    <div class="modal fade" id="myModal-<%= "#{ff.object.print_location.id}" %>_<%= "#{@shop_product}" %>" tabindex="-1" role="dialog" data-keyboard="false">
    </div>
    <% end %>
    <%= f.submit "Sync" %>
<% end %>

Это означает: http://jsfiddle.net/a01h6rz7

^ Показывает связь между кнопкой и модальным. Существует много модальностей, поэтому мне нужен уникальный, чтобы модал открывался для правильной ассоциации.

Когда у меня есть созданная запись, я могу использовать @shop_product.id, и она будет работать. Есть ли способ использовать @shop_product для нового, чтобы получить уникальный идентификатор, который будет работать?

Я помечаю javascript на всякий случай, если может быть идея или способ создать уникальный идентификатор на основе @shop_product инициализации. Если есть дополнительная информация, которую вы хотели бы решить, сообщите мне

1 Ответ

0 голосов
/ 19 января 2020

Попробуйте этот код

<%= form_for @shop_product do |f| %>
    <% shop_product_id = @shop_product.object_id %>
    <%= f.fields_for :shop_product_print_files do |ff| %>
        <% print_location_id = ff.object.print_location.id%>
    <button
        type="button"
        class="btn btn-primary"
        data-toggle="modal"
        data-target="#myModal-<%= print_location_id %>_<%= shop_product_id %>"
        id="printLocationId_<%= print_location_id %>(<%= print_location_id %>)"
    >
        Choose Image
    </button>
    <div
        class="modal fade"
        id="myModal-<%= print_location_id %>_<%= shop_product_id %>"
        tabindex="-1"
        role="dialog"
        data-keyboard="false">
    </div>
    <% end %>
    <%= f.submit "Sync" %>
<% end %>
  1. Прежде всего, не используйте @shop_product, потому что это объект. Если вам нужна ссылка, а у нее еще нет идентификатора, object_id даст вам уникальный идентификатор.
  2. Если вам нужно снова и снова создавать / использовать одну и ту же вещь, вы можете создать метод в модальный, или извлеките значение в переменной внутри блока.
  3. Если вам не нужен print_location, вам не нужно делать ff.objec.print_location.id, который запросит print_location. Вместо этого используйте print_location_id.
  4. Не используйте ненужную интерполяцию строк, например <%= "#{ff.object.print_location.id}" %>, а просто простой код erb, такой как <%= ff.object.print_location.id %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...