Rails: рендеринг шаблона js.erb с использованием контроллера - PullRequest
2 голосов
/ 16 марта 2012

У меня есть приложение rails, пытающееся включить AJAX, при нажатии на кнопку которого открывается модальное окно и форма. Я хочу иметь возможность отображать ошибки проверки, если это не удается, поэтому в моем действии создания я подумал о повторной визуализации файла new.js.erb. Это правильный подход?

def create
    @place = Place.new(params[:place])
    if @place.save
       redirect_to places_path, :notice => "Successfully created place"
    else
       render "new.js.erb"
    end
end

В результате я получаю экранированный текст в моем браузере, например:

$("#new_grouping").html("<div class=\"modal-header\">\n  <a class=\"close\" data-   dismiss=\"modal\">×<\/a>\n  <h3>Create a new menu section<\/h3>\n<\/div>\n<form accept-charset=\"UTF-8\" action=\"/places/1-mama-s-pizza/groupings\" class=\"simple_form new_grouping\" id=\"new_grouping\" method=\"post\" novalidate=\"novalidate\">

Я пытался поместить различные опции в блок рендера, но не повезло. Любые советы?

Ответы [ 2 ]

15 голосов
/ 16 марта 2012

Рекомендуется поддерживать вызовы AJAX и Non-AJAX на случай, если по какой-либо причине у пользователя отключен JavaScript.

def create
  @place = Place.new(params[:place])

  respond_to do |format|
    if @place.save
      format.html { redirect_to places_path, :notice => "Successfully created place" }
      format.js   # renders create.js.erb, which could be used to redirect via javascript
    else
      format.html { render :action => 'new' }
      format.js { render :action => 'new' }
    end
  end
end

render :action => 'new' фактически отображает шаблондействие контроллера new, которое приводит к new.html.erb соответственно к new.js.erb, в зависимости от того, является ли это вызов не AJAX или AJAX.

В new.js.erb идет код ERB / ​​javascript:

$("#new_grouping").html("<%= escape_javascript(...) %>">
1 голос
/ 17 марта 2012

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

render :action => "create"

или, если вам нужно просто визуализировать отдельный фрагмент, в своем файле действия напишите

<%= render :partial => "path/to/partial" %>

, как я сказал, тогда выне будет проблем с типом контента в ответе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...