2

public/images に保存されている画像パスの先頭image_pathに追加することを主張するのはなぜですか?assets/

私は写真家のウェブサイトを構築しているので、レイアウトの一部として表示されるいくつかの写真のランダムなサブセレクションを含め、当然のことながら写真をそこに入れたいと考えています。さらに、すべての写真を表示するだけの非常にシンプルなギャラリーを作成しました。これらの画像ファイルは次の場所に保存されます。

public/images/gallery

ImageMagick gem を取得して、目的のサイズに縮小しました。これらの小さなファイルは次の場所に保存されます。

public/images/gallery/sm/

縮小は、レイアウト ERB のレンダリングの一部として、ページの読み込み時に行われます。最初はひどく聞こえるかもしれませんが、画像を 1 回だけ縮小します。遅延縮小は、新しい写真を追加するためにサーバーを再起動する必要がないことを意味します (彼はやりたいと思っていました)。

私の読みでは、アセット パイプラインは静的レイアウト用であることが示唆されていますが、これはそれよりも動的です。特にプロダクションモードのRailsは、生成されたサムネイルがコンパイルされていないと不平を言うので、 public/images がこのようなものに行くべき場所であると信じるようになりました。

問題に入ります: これらの画像を上記のパスに配置すると、image_path はアセット パイプライン パスのように見えるものを返します。サブディレクトリをフラット化し、すべてを public/images に配置しても機能しません。

私の回避策は、タグを手動で作成することです。では、image_path (および拡張では image_tag) はアセット パイプライン用のみですか? パブリック イメージの文字列からタグを作成する必要がありますか? image_path は最初に一致するファイルをパブリックで検索することになっているという言及も見つけましたが、それを主張するドキュメント ( http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html ) も見ました。パスを返すものの存在を確認しません。

4

1 に答える 1

0

編集:元の回答のエラー

Rails アセット パイプラインは、アプリケーションの起動時に存在するアセットを提供するためのものです。あなたが示唆するように動的アセットを提供するために、同様の質問に対するこの回答があります.Rails 3.1 assetsは、サーバーが再起動するまでrmagickによってアップロードされた新しい画像を認識しません。これは、私の回答よりもはるかに優れた回答です。

私の最初の答えを改善するために検索した結果、image_tag の作成に対する最善の解決策は、独自の image_tag のようなヘルパーを作成することだと思います。多分:

def public_image_path(filename)
  [your path to that file]
end

def public_image_tag(filename, options={})
  image_tag(public_image_path(filename), options)
end
于 2013-02-12T19:58:20.943 に答える