Рельсы частичные в модальном (рендеринг частичные из другой модели) - PullRequest
5 голосов
/ 21 ноября 2011

Я пытался включить частичное в модальное что-то похожее на это Rails Admin , когда вы нажимаете "создать язык".

Теперь, когда я действительно не выяснил, кактам работает код, я пытался сделать смесь между этим Rails - AJAX - модальным диалогом? и чем-то собственным.

Дело в том, что частичное теперь визуализируется в модальном.Но когда я нажимаю «сохранить», проверка вернется к «нормальному» представлению создания нового и не будет отображать ошибки проверки непосредственно в модальном режиме.

  1. Как я могу показатьошибки проверки в появившемся модале напрямую?

  2. Когда я сохраняю, я должен как-то отличать сохранение от этого модального и обычное сохранение, так как этот фрагмент будет вызываться откуда-то еще ипотребуется установить новый созданный объект непосредственно как новый объект в раскрывающемся списке.Я думаю, мне нужно будет отличить формат ответа, а затем использовать JS, чтобы установить новый идентификатор для идентификатора DropDown?

Вот некоторый код, написанный до сих пор.В представлении, где я включаю частичное, это выглядит так, когда я вызываю другой контроллер (поскольку я нахожусь на другом контроллере-new-view).

 $.get('<%= url_for :controller => 'customers', :action => 'new' %>',
            function(data) {
                $('#customer-modal').html(data);
            }
    );

Тогда новый в контроллере "customres" различаетмежду другим форматом запроса и рендерингом другого частичного (в данном случае «_ajax_form.html.erb»):

if request.xhr?
  render "_ajax_form", :layout => false

В этом частичном я использую «simple_form_for @customer,: remote => true do |f] .... ", так что я предполагаю, что в конце отправка должна выглядеть иначе, чем стандартная, так как это вызывает обычное" create "на контроллере?

<div class="modal-footer">
    <%= f.button :submit, :class => 'btn primary' %>
    <a id='cancel-form' class= "btn small info">cancel</a>
  </div>

Спасибо за любую помощь, которая разъясняет, чтоЯ делаю неправильно или как это должно быть сделано, поскольку мой опыт работы с Rails и JS / AXAX еще не слишком опытен ..;)

  • РЕДАКТИРОВАНИЕ: У меня есть версия, где в моем специальном партиале, которыйзагружен в модальном режиме, вызовет отдельное действие с именем "new_from_sale" внутри simple_form_for:

simple_form_for @customer, :url => url_for(:action => 'new_from_sale', :controller => 'customers') do |f|

Затем в контроллере, когда сохранение этого новогообъект, я перенаправляю к первому вызванному представлению с новым идентификатором в качестве параметра, который затем заполняет раскрывающийся список.В другом случае, когда новый объект не может быть сохранен, мне нужно как-то показать ошибки, все еще в этом модальном.До сих пор обе попытки либо напрямую визуализировать частичную render :partial => "customers/ajax_form", либо вернуть JS-код render :js => "$('#sale_customer_id').val(#{@customer.id});" пока не сработают ... но я буду пытаться попытать счастья ..

1 Ответ

2 голосов
/ 22 ноября 2011

Вот базовый пример того, как я бы сделал модальную форму, которую я написал в ответ на похожий вопрос ( Rails и диалоговая форма модального jquery ):

https://github.com/ramblex/modal-form

Вам необходимо добавить :remote => true к форме, которая загружается в диалог.Это приведет к визуализации формата JS из действия create.Затем вы можете обработать ответ в файле create.js.erb.

...