Можно ли отобразить js.erb без использования метода response_to и использования нетрадиционного имени файла? - PullRequest
3 голосов
/ 29 августа 2011

Можно ли отобразить js.erb в ответ на запрос AJAX без использования метода respond_to?

Я спрашиваю по нескольким причинам:

  1. Я буду только выполнять вызовы AJAX для моих контроллеров;
  2. Я не буду поддерживать другие типы контента (например,: html,: xml и т. Д.);и
  3. Я хочу иметь возможность визуализировать другой файл 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 ]

5 голосов
/ 29 августа 2011

Хотя ответ Кибера С. правильный, вот еще один метод, который, на мой взгляд, будет полезен для тех, кто хочет поддержать «обычный» метод создания файлов 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, удаляя подчеркивание.

3 голосов
/ 29 августа 2011

Частичные файлы должны быть названы как подчеркивание.

Попробуйте переименовать ваше частичное в app/views/posts/_awesome.js.erb

...