铁轨::铁道
设置:
bin/rails plugin new my_gem
# my_gem/lib/my_gem/railtie.rb
module MyGem
class Railtie < ::铁轨::铁道
def root
@root ||= Pathname.new(__dir__).parent.parent
end
initializer :my_gem_assets do |app|
# This is to be able to require your styles from main app application.css
# like this:
#
# /* =require my_gem/application.css */
#
app.config.assets.paths << root.join("app/assets/stylesheets")
# This is to be able to directly link your styles from your templates:
#
# <%= stylesheet_link_tag "my_gem/application.css" %>
#
# this path is relative to any `app.config.assets.paths`
app.config.assets.precompile << "my_gem/application.css"
end
end
end
如果您要使用MANIFEST:
# my_gem/lib/my_gem/railtie.rb
module MyGem
class Railtie < ::铁轨::铁道
def root
@root ||= Pathname.new(__dir__).parent.parent
end
initializer :my_gem_assets do |app|
app.config.assets.paths << root.join("app/assets/stylesheets")
app.config.assets.paths << root.join("app/assets/config") # <-----------------------.
app.config.assets.precompile << "my_gem_manifest.js" # relative to asset path -'
end
end
end
// my_gem/app/assets/config/my_gem_manifest.js
//= link my_gem/application.css
100
Rails::Engine
设置:
bin/rails plugin new my_engine --mountable
与铁路公司不同的是,Engine为你处理了很多事情:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
initializer :my_engine_assets do |app|
# This is automatically done by Rails::Engine
# app.config.assets.paths << root.join("app/assets/stylesheets")
# so you can just require files without extra config
#
# /* =require my_engine/application.css */
# If you want to link directly:
#
# <%= stylesheet_link_tag "my_engine/application.css" %>
#
# add that file to be precompiled
# app.config.assets.precompile << "my_engine/application.css"
#
# or use manifest
# ('app/assets/config' is automatically added to assets paths)
app.config.assets.precompile << "my_engine_manifest.js"
end
end
end
// my_engine/app/assets/config/my_engine_manifest.js
//= link_directory ../stylesheets/my_engine .css
主应用程序
现在,您可以从主应用程序使用您的gem/Engine资源:
# app/views/layouts/application.html.erb
# we can do this because these files are in
# Rails.application.config.assets.paths and
# Rails.application.config.assets.precompile
<%= stylesheet_link_tag "my_gem/application.css" %>
<%= stylesheet_link_tag "my_engine/application.css" %>
或者,您可以要求主应用程序application.css中的文件:
/* app/assets/stylesheets/application.css */
/* in this case you don't have to precompile them
* =require my_gem/application.css
* =require my_engine/application.css
*/