如何将一个块传递给 Rails.application.config.assets?

How pass a block into Rails.application.config.assets?

我正在编写 rails 4 应用程序,我正在尝试重构 assets.rb 文件。

当前状态:

Rails.application.config.assets.enabled = true
Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.prefix  = '/sprockets'
Rails.application.config.assets.precompile += %w(404.html 500.html)
Rails.application.config.assets.precompile << %w( big array of css files)
Rails.application.config.assets.precompile << %w( big array of js files)

我想看的:

Rails.application.config.assets do |assets|
  assets.enabled = true
  assets.version = '1.0'
  assets.prefix  = '/sprockets'

  assets.paths << "#{Rails.root}/app/assets/plugins"
  assets.paths << "#{Rails.root}/app/assets/html"

  assets.precompile += %w(404.html 500.html)
  assets.precompile << /\.(?:svg|eot|woff|ttf|swf)\z/

  # css
  assets.precompile << %w( big array of css files)

  # js
  assets.precompile << %w( big array of js files)
end

是否可以将代码块传递给 Rails.application.config.assets

我对 rails 不是很熟悉,但像这样的方法可能会起到解决作用:

def configure_assets obj
  yield obj
end

configure_assets(Rails.application.config.assets) do |asset|
  asset.enabled = true
  asset.version = '1.0'
  # ...etc....
end

不可能,因为如果您查看它的签名,assets 并不期望 s 块。可以传,但对资产没有任何影响

使用tap:

Rails.application.config.assets.tap do |assets|
  assets.enabled = true
  # ...
end