Ale*_*rov 5 javascript ruby-on-rails-3
我希望Rails在开发和生产模式下注入不同的js文件.
例:
发展:
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
生产:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
是否有可能在Rails 3中实现它?
此致,Alexey Zakharov
至少从Rails 3开始,您可以在config.action_view.javascript_expansions [:defaults] =变量中传递config/application.rb中定义javascript_include_tag的符号.:defaults
这将被注释掉,并且至少包括application.js.
如果要为生产和开发定义一组不同的默认值,请将此行注释掉并打开config/environments/production.rb和config/environments/development.rb.此处定义的任何设置都将覆盖application.rb中的任何设置,并且仅适用于相关环境.对于您的示例,您需要以下内容:
# development.rb
config.action_view.javascript_expansions[:defaults] = %w(jquery.js myscripts.js)
# production.rb
config.action_view.javascript_expansions[:defaults] = %w(http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js myscripts.min.js)
Run Code Online (Sandbox Code Playgroud)
您可以使用辅助方法加载您的 js 并执行条件检查以确定它是哪个环境。
app/views/layouts/application.html.*(无论您通常在哪里包含 JavaScript)
load_javascript
Run Code Online (Sandbox Code Playgroud)
应用程序/helpers/application_helper.rb
def load_javascript
if Rails.env.production?
javascript_include_tag 'js1', 'js2', :cache => true
else
javascript_include_tag 'js3', 'js4'
end
end
Run Code Online (Sandbox Code Playgroud)
您可以通过只返回load_javascript文件列表并且只有一个javascript_include_tag.