Как визуализировать 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 не работает. Работает ли конвейер активов только в приложении/активах? Что я делаю не так? Спасибо.
Ответы
Ответ 1
У меня была такая же проблема с Rails 3.1.0. Попробуйте переименовать файл только new.js.coffee
. Он должен все равно отображать erb, несмотря на то, что не имеет расширения на имя файла.
Это определенно запутывает, что шаблоны представлений не соответствуют тем же соглашениям, что и конвейер активов.
Ответ 2
Если вы хотите оставить расширение .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)