Create a gist now

Instantly share code, notes, and snippets.

Inline SVG for Rails
# Put this method in your helper file to render inline SVG
def inline_svg(path)
file = File.open("app/assets/images/#{path}", "rb")
raw file.read
end
@davidwmartin

This is extremely helpful sir, thank you very much.

@p886

Thanks for the snippet, it is good practice to close a file after you use it. I would therefore use the block form of File#open so that the file automatically get's closed after we read from it:

def inline_svg(path)
    File.open("app/assets/images/#{path}", "rb") do |file|
    raw file.read
  end
end
@datenimperator

Instead of hard coding the path to app/assets/images I suggest to let the asset pipeline manage the file location. Use Rails.application.assets.find_asset(path).to_s instead of reading the file directly.

@dkam

Combining all this, I added this to my application helper:

  def inline_svg(path)
    raw Rails.application.assets.find_asset(path + '.svg').to_s
  end
@kangkyu

Rails.application.assets became nil when config.assets.compile = false on production. Does it matter?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment