4

助けてくれた人たちに..ありがとう。まだ解決策はありませんが、近づいています。私が思うエラーは、私の「ファイル」が「app / views / main / show/_partial.html.erb」と評価されるためです。そしてrenderはそれ自身の相対パスを追加します。だから私はファイル名をリストする必要があると思います..多分dir.foreachまたはdir.globタイプのコマンド..私は掘り続けます。ありがとう!

ページで呼び出したいパーシャルでいっぱいのディレクトリがあります。ループを作成しましたが、エラーが発生します。

<% Dir["app/views/main/show/*"].each do |file| %>
  <%= render #{file} %>
<% end %>

レンダリングラインを単純なものに置き換えると

ファイル

ファイル名が一覧表示されるので、ループとディレクトリの場所が機能することがわかります。私が考える問題は、renderが文字列を探していることです。だから私はグーグルを検索して、ここでは#{file}のように、最初に変数を作成し、rawなど、さまざまなことを試しました。

また、renderはDirに関連する別のディレクトリを検索している可能性があると思います。そこでいくつか試してみます。

これをどのように処理する必要がありますか?DirからDir.foreachまたはその他の意味のある戦略に切り替える準備ができています。

ありがとう。

編集:これが私が実装した解決策です(ディレクトリパスが上から変更されました):

<% Dir["app/views/partials/show/*.html.erb"].each do |file| %>
<p> <%= render 'partials/show/' + File.basename(file,'.html.erb').slice!(1..-1) %></p>
<% end %>
4

1 に答える 1

8

fileはすでに文字列であるため、エスケープする必要はありません。また、フルパスを指定する必要があります。これは機能するはずです:

<% Dir["app/views/main/show/*"].each do |file| %>
  <%= render :file => Rails.root.join(file).to_s %>
<% end %>

#{}二重引用符でのみ機能します。たとえば"#{file}"、この場合は必要ありません。を使用できますfile

于 2012-10-23T14:40:25.030 に答える