Как визуализировать new.js.coffee.erb в приложении / views? - PullRequest
31 голосов
/ 01 октября 2011

Используя 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 не работает.Конвейер ресурсов работает только в приложении / активах?Что я делаю неправильно?Спасибо.

Ответы [ 2 ]

51 голосов
/ 16 октября 2011

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

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

5 голосов
/ 20 января 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

(Это вклад Червинки в выпуск кофе-рельсов # 36 )

...