Партиал Rails в модальном режиме (частичный рендеринг из другой модели)

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

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

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

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

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

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

 $.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]....", поэтому я предполагаю, что в конце отправка должна выглядеть иначе, чем стандартная, так как это вызывает обычное "создание" на контроллер?

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

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

  • EDITED: теперь у меня есть версия, в которой в моей специальной части, которая загружается в модальном окне, будет вызываться отдельное действие под названием "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});" еще не сработали... но я буду продолжать испытывать удачу..


person fisco    schedule 20.11.2011    source источник


Ответы (1)


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

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

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

person ramblex    schedule 21.11.2011
comment
Спасибо, не все, что вы делаете, было применимо для нашего дела, но это дало несколько хороших советов. Например, мы используем частичное в модальном окне, а также отдельно для создания новых / редактирования объектов. Там нам нужно было бы разделить, я думаю, не использовать :remote =› true, иначе рендеринг не работает.. - person fisco; 25.11.2011