7

おそらく、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が、configですnil

どうすればimage_path外部のビューから正常に電話をかけることができますか?

4

3 に答える 3

12

view_contextビューで使用できるヘルパー メソッドにアクセスするために使用します。

image_pathコントローラーからこのように呼び出すことができます。

view_context.image_path "my_image.png"
于 2012-07-17T16:40:35.703 に答える
0

Mason Jones によって投稿されたこのソリューションは、私にとってはうまくいきます。

アプリケーションコントローラーで:

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 インスタンスを作成しています。これにより、必要な場所にヘルパーが提供されます。彼は自分の投稿でそれを説明しています。

また、これを使用してモデルを拡張します (画像が存在しない場合にデフォルトの画像を返す、より柔軟な image_tag ヘルパーを作成します。たとえば、person.small_image は、tag_helper を使用する person モデルのインスタンス変数です)。そのために、ActiveRecord::Base を拡張する Monkey Patch 初期化子に同じコードを入れました。次に、モデル内から ActiveRecord::Base.tag_helper を呼び出します。これは少し厄介ですが、私はレールに慣れていません。おそらくもっときれいな方法があります。

それが役立つことを願っています。

于 2011-03-11T01:02:36.463 に答える