Как отобразить new.js.coffee.erb в приложении/представлении?

Используя Rails 3.1 jquery_ujs, у меня есть ссылка с :remote => true, и новое действие контроллера отвечает js и отображает new.js.erb, который содержит:

$('#post-form').html('<%= escape_javascript(render(:partial => "form")) %>');

Он отображает партиал _form.html.erb. Это работает.

Теперь я хочу использовать Coffeescript, но переименование new.js.erb в new.js.coffee.erb не работает. Конвейер ассетов работает только в приложениях/ассетах? Что я делаю неправильно? Спасибо.


person rayvinly    schedule 30.09.2011    source источник


Ответы (2)


У меня была такая же проблема с использованием Rails 3.1.0. Попробуйте переименовать файл просто в new.js.coffee. Он по-прежнему должен отображать erb, несмотря на отсутствие расширения в имени файла.

Определенно сбивает с толку то, что шаблоны представлений не следуют тем же соглашениям, что и конвейер ресурсов.

person cjbottaro    schedule 15.10.2011
comment
подтвержденный; частичное оценивается ERB, несмотря на отсутствие расширения, и рендеринг может найти файл в порядке. - person Teflon Ted; 29.03.2012
comment
Если вы согласны с тем, что это сбивает с толку, вы можете обсудить эту проблему: github.com /rails/coffee-rails/issues/36 - person silasdavis; 09.07.2013
comment
Небольшое обновление. Начиная с Rails 4, вы можете (и должны) добавить расширение .erb, чтобы erb анализировал его как шаблон перед coffeescript. - person IAmNaN; 21.11.2014
comment
Однако @IAmNaN до Rails 4.1.9 файлы представлений с именем action.js.coffee.erb не распознаются как шаблоны представлений. - person Olivier Lance; 20.01.2015
comment
На самом деле даже в Rails 4.2/coffee-rails 4.1.0 это расширение не распознается... - person Olivier Lance; 20.01.2015
comment
@OlivierLance: Это озадачивает. В моем проекте есть два файла .js.coffee.erb, и оба работают. rails имеет версию 4.2.0, а гем coffee-rails также имеет версию 4.1.0. Нет связанных инициализаторов. - person IAmNaN; 20.01.2015
comment
Черт. Я не могу заставить его работать! Вот тестовый проект: ide.c9.io/olance/erbcoffeetest Удаленная ссылка на тест действие, отображаемое с использованием представления .js.coffee.erb... Rails жалуется, что не может найти представление. - person Olivier Lance; 21.01.2015

Если вы хотите сохранить расширение .js.coffee.erb, вот фрагмент кода для Rails 4, чтобы Rails распознавал файл как допустимый шаблон представления:

# config/initializers/coffee_erb_handler.rb
ActionView::Template.register_template_handler 'coffee.erb', Coffee::Rails::TemplateHandler # without this there will be template not found error

class ActionView::PathResolver < ActionView::Resolver
  EXTRACT_METHODS = %w{extract_handler_and_format_and_variant extract_handler_and_format} # name for rails 4.1 resp. 4.0

  method_name = EXTRACT_METHODS.detect{|m| method_defined?(m) || private_method_defined?(m)}
  raise 'unknown extract method name' if method_name.nil?

  old_method_name = "old_#{method_name}"

  alias_method old_method_name, method_name
  define_method(method_name) do |path, default_formats|
    self.send(old_method_name, path.gsub(/\.js\.coffee\.erb$/, '.js.coffee'), default_formats)
  end
end

(Это вклад Cervinka в выпуск №36 о кофейных рельсах)

person Olivier Lance    schedule 20.01.2015