Использование вспомогательного метода для вставки html в документ

#ruby-on-rails #ruby #twitter-bootstrap #modal-dialog

#ruby-on-rails #ruby #twitter-bootstrap #модальный диалог

Вопрос:

Используя twitter bootstrap для нашего приложения rails 4, я хочу создать вспомогательную функцию для добавления ссылки на страницу, при нажатии на которую будет создано модальное всплывающее окно, отображающее шаблон показа. Я думаю, что я близок, хотя, когда страница, с которой вызывается эта функция, загружается, кнопка отображается правильно, но при нажатии она выдает модальный код с необработанной инъекцией ruby, например:

 <%= render :template => 'imprintables/show', locals: { modal: true, id: 1 } %>
 

Моя проблема в том, что вместо отображения инъекции я бы хотел, чтобы инъекция ruby была предварительно сформирована. Также были бы весьма признательны общие советы по стилю и другие указания / критика. Спасибо!

application_helper.rb:

 module ApplicationHelper
  def imprintable_modal(imprintable) raw %(
    <div class="col-lg-3 text-right">
      <a href="#" class="btn btn-primary" data-toggle="modal" data-target="#basicModal">Click for Imprintable Info</a>
    </div>

    <div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <%= render :template => 'imprintables/show', locals: { modal: true, id: #{imprintable.id} } %>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          </div>
        </div>
      </div>
    </div> )
  end
end
 

Ответ №1:

Если я правильно понял, и содержимое шаблона ‘imprintables / show’ не нужно загружать динамически (через ajax), тогда я предлагаю использовать простые старые шаблоны.

app/views/application/_modal.html.erb:

 <div class="col-lg-3 text-right">
      <a href="#" class="btn btn-primary" data-toggle="modal" data-target="#basicModal">Click for Imprintable Info</a>
    </div>

    <div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <%= render :template => 'imprintables/show', locals: { modal: true, id: #{imprintable.id} } %>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          </div>
        </div>
      </div>
    </div>
 

и в application_helper.rb:

 module ApplicationHelper
  def imprintable_modal(imprintable)
    render :partial => 'modal', :locals => { :imprintable => imprintable }
  end
end
 

Комментарии:

1. Я как раз собирался опубликовать, что я понял это, но вы меня опередили! Я думаю, что я просто застрял, думая одним способом, когда этот ответ настолько болезненно очевиден. Спасибо за ответ!