より Rails な方法は、ヘルパーを使用することです。これにより、ファイルの coffeescript または javascript バージョンを確認できます。
def javascript_exists?(script)
script = "#{Rails.root}/app/assets/javascripts/#{params[:controller]}.js"
File.exists?(script) || File.exists?("#{script}.coffee")
end
次に、レイアウトで使用できます。
<%= javascript_include_tag params[:controller], :media => "all" if javascript_exists?(params[:controller]) %>
CSS で同じことができます。
-- helper --
def stylesheet_exists?(stylesheet)
stylesheet = "#{Rails.root}/app/assets/stylesheets/#{params[:controller]}.css"
File.exists?(stylesheet) || File.exists?("#{stylesheet}.scss")
end
-- layout --
<%= stylesheet_link_tag params[:controller], :media => "all" if stylesheet_exists?(params[:controller]) %>
編集: #javascript_exists を更新しましたか?
最近、javascript_exists?
ヘルパーにいくつかの変更を加えました。
def javascript_exists?(script)
script = "#{Rails.root}/app/assets/javascripts/#{script}.js"
extensions = %w(.coffee .erb .coffee.erb) + [""]
extensions.inject(false) do |truth, extension|
truth || File.exists?("#{script}#{extension}")
end
end
アプリケーション レイアウトで呼び出します。
<%= javascript_include_tag params[:controller] if javascript_exists?(params[:controller]) %>
これにより、より多くの拡張子が処理され、inject を使用してファイルが存在するかどうかが判断されるようになりました。その後、アプリの必要に応じて、extensions 配列にさらに多くの拡張機能を追加できます。
編集 DEUX: #stylesheet_exists を更新しましたか?
同じですが、スタイルシートの場合:
def stylesheet_exists?(stylesheet)
stylesheet = "#{Rails.root}/app/assets/stylesheets/#{stylesheet}.css"
extensions = %w(.scss .erb .scss.erb) + [""]
extensions.inject(false) do |truth, extension|
truth || File.exists?("#{stylesheet}#{extension}")
end
end
EDIT最後(おそらく):乾かしてください
def asset_exists?(subdirectory, filename)
File.exists?(File.join(Rails.root, 'app', 'assets', subdirectory, filename))
end
def image_exists?(image)
asset_exists?('images', image)
end
def javascript_exists?(script)
extensions = %w(.coffee .erb .coffee.erb) + [""]
extensions.inject(false) do |truth, extension|
truth || asset_exists?('javascripts', "#{script}.js#{extension}")
end
end
def stylesheet_exists?(stylesheet)
extensions = %w(.scss .erb .scss.erb) + [""]
extensions.inject(false) do |truth, extension|
truth || asset_exists?('stylesheets', "#{stylesheet}.css#{extension}")
end
end