パーシャルとしてレンダリングし、リソースをローカルとして渡す必要があります。
<script>
<%= render :partial => 'resources/gallery_resource', :locals => { :resource => @resource } %>
</script>
また、gallery_resource.js.erbファイルで、@resourceを単なるリソースに変更する必要があります。
element.image = "<%= asset_path 'resources/galleries/'+resource.uid+'/'+index+'.jpg' %>"
これが他のアクションでレンダリングされる場合は、:localsハッシュで:resource値を渡す必要もあります。
js.erbファイルのスコープは、いくつかの点によって異なります。
- コントローラ自体がファイルをレンダリングしている場合、コントローラはインスタンス変数('@resource'など)にアクセスできます。これは、views / viewtype / show.js.erbが存在し、ブラウザーがjs応答タイプを要求した場合に当てはまります。.html.erbファイルの場合と同じです。
- パーシャルとしてレンダリングされている場合、唯一のスコープは:localsハッシュで渡すものです。これらはインスタンス変数ではなくローカル変数であるため、そのように参照されます(「リソース」など)。
- 一方、javascript_include_tagを使用すると、JSファイルを直接参照するタグがHTMLに作成されます。可変ではないJavaScriptを含める必要がある場合は、これで問題ありません。これらは、app /Assets/ディレクトリまたはpublic/ディレクトリの下のどこかにある必要があります。
app /assetsまたはpublic/にあるファイルは、個々のリクエストの変数にアクセスできません。コンパイルされない(public /)か、一度だけプリコンパイルされる(app / Assets)かのどちらかです。
おそらく、問題のファイルは現在、app/assetsディレクトリにあります。部分的にレンダリングするには、views /ディレクトリの下のどこかに移動し、名前の前にアンダースコア(_)を付けます。
app/views/resources/_gallery_resource.js.erb