使用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不起作用。资产管道只在app/assets中工作吗?我做错了什么?谢谢。
我在使用Rails 3.1.0时有过同样的问题。尝试将文件重命名为new.js.coffee
。尽管文件名上没有扩展名,它仍然应该呈现erb。
视图模板不遵循与资产管道相同的约定,这绝对令人困惑。
如果您希望保留.js.coffee.erb
扩展名,这里有一段代码让Rails 4将该文件识别为有效的视图模板:
# 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在coffee-rails问题#36上的贡献)