Можно ли отобразить js.erb в ответ на запрос AJAX без использования метода respond_to
?
Я спрашиваю по нескольким причинам:
- Я буду выполнять только AJAX-вызовы своих контроллеров;
- Я не буду поддерживать какие-либо другие типы контента (например,: html,: xml и т. Д.); а также
- Я хочу иметь возможность визуализировать другой файл
js.erb
, а не тот, который назван так же, как метод контроллера (т. Е.different.js.erb
)
Вот код в качестве примера.
app / views / posts / awesome.js.erb:
alert("WOOHOO");
PostsController # create
def create
@post = Post.new(params[:task])
if @post.save
render :partial => 'awesome.js.erb'
end
end
Когда метод create
вызывается через AJAX, Rails жалуется на частичное отсутствие:
ActionView::MissingTemplate (Missing partial post/awesome.js, application/awesome.js with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]}. Searched in:
2 ответа
Частичные файлы должны быть названы с подчеркиванием.
Попробуйте переименовать партиал в app/views/posts/_awesome.js.erb
Хотя ответ Кибера С. верен, вот еще один метод, который, я думаю, будет ценным для тех, кто хочет поддержать «традиционный» метод создания файлов js.erb
.
Вместо использования render :partial
используйте render :template
. Однако здесь есть предостережение: путь поиска для шаблона не ограничивается автоматически именем контроллера (т. Е. app/views/posts
). Вместо этого Rails начинается с app/views/
. Итак, чтобы сослаться на «шаблон», вам нужно добавить подпапку, в которую вы хотите заглянуть, если она не находится в корне. В моем случае мне пришлось добавить posts
.
def create
@post = Post.new(params[:task])
if @post.save
# using :template and added 'posts/' to path
render :template => 'posts/awesome.js.erb'
end
end
Преимущество здесь в том, что если вы захотите использовать метод respond_to
и следовать соглашению, вам не нужно будет переименовывать свой js.erb
, удаляя подчеркивание.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.