AssetTagHelper :: image_path外部视图

据推测, ActionController::Base.helpers就像一个代理,用于访问视图外的助手。 然而,那里定义的许多方法依赖于控制器变量,我无法成功调用:

 ActionController::Base.helpers.image_path("my_image.png") >> TypeError Exception: can't convert nil into String 

在源头挖掘我看到compute_asset_host方法试图访问config.asset_host但是confignil

如何从外部视图成功调用image_path

使用view_context访问视图中可用的辅助方法。

您可以从控制器中调用image_path

 view_context.image_path "my_image.png" 

对于Rails 3,请在此处查看更清晰的解决方案如何在Rails 3 Controller中使用image_path

这个由梅森琼斯发布的解决方案适合我。

在您的应用程序控制器

 def self.tag_helper TagHelper.instance end class TagHelper include Singleton include ActionView::Helpers::TagHelper include ActionView::Helpers::AssetTagHelper end 

然后你可以做以下的事情,或者你需要的任何其他事情。

 active_scaffold :mything do |config| config.columns = [:name, :number, :active, :description] config.update.link.label = tag_helper.image_tag('document_edit.png', :width => "30") config.delete.link.label = tag_helper.image_tag('document_delete.png', :width => "30") config.show.link.label = tag_helper.image_tag('document.png', :width => "30") list.sorting = {:name => 'ASC'} end 

您正在ApplicationController中创建TagHelper的Singelton实例。 无论何时需要帮助,都可以为您提供帮助。 他在post中解释了这一点。

此外,我使用它来扩展我的模型(创建一个更灵活的image_tag帮助器,如果没有图像存在则返回默认图像 – 例如person.small_image是人模型的实例变量,它使用tag_helper)。 为此,我将相同的代码放在扩展ActiveRecord :: Base的Monkey Patch初始化程序中。 然后我从我的模型中调用ActiveRecord :: Base.tag_helper。 这有点乱,但我是铁杆新手。 可能有一种更清洁的方式。

希望有所帮助。