1

Rails のアセット ファイル内でパーシャルをレンダリングする (または少なくとも別のファイルを含める) 方法を知っている人はいますか? テンプレート/フォルダーのセットアップ (静的 HTML ファイルを含む) があり、これらのファイル内に抽象化して他のテンプレート ファイル間で共有したい断片があります。

このrenderメソッドは、アセット パイプライン ファイルでは機能しません。正しいモジュールを見つけることで何らかの形で含めることができると確信していますが、レンダーモジュール自体が他のモジュール、メソッド、変数に依存している可能性があるため、これが機能するかどうかはわかりません.

これを行う方法についてのアイデアはありますか?または可能であれば?

4

1 に答える 1

3

私は自分自身の解決策を考え出しました。

libフォルダーにヘルパーファイルを作成し、それを呼び出しますassets_helper.rb。Asset_helper内のコードは次のとおりです。

def partial(name, args = {}, dir = 'app/assets/templates')
  require 'ostruct'
  namespace = OpenStruct.new(args)
  name += '.html'
  [name + '.erb', name].each do |n|
    n = File.join(dir, n)
    next unless File.exist?(n) 
    tpl = ERB.new(File.new(n).read)
    compiled = tpl.result(namespace.instance_eval { binding })
    return compiled
  end
end

次に、そのファイルを使用する各アセットファイルの先頭に含めます。ファイル内では、このように部分コマンドを使用できます。

<% require './lib/asset_helper.rb' %>

<!--- some HTML template --->
<%= partial('page/_partial', :var1 => true, :var2 => false) %>
<---- some other page --->

これは機能します。ただし、唯一の問題は、Rails3.1がアセットフォルダーにあるものをすべてキャッシュすることです。したがって、パーシャルを編集する場合は、そのファイルのキャッシュがクリアされるように、その中にあるルートファイルを更新する必要があります

于 2012-08-03T16:22:49.737 に答える