Rails3の使用-多くのタスクを持つプロジェクトがあります。 JavaScriptを使用して、各タスクのUIを構築したいと思います。私は、それぞれのJavaScriptパーシャルをレンダリングすることで、プロジェクトの表示ページにそれらのタスクを表示できると考えました。 tasks/show.js.erbを表示するために「tasks/show」を取得できません。
Projects/show.html.erb内
<div id="tasks">
<%= render(:partial => "tasks/show", :collection => @project.tasks) %>
</div>
tasks/show.js.erb
$("tasks").append(new TaskWidget(task.id))
エラーが出る
ActionView::MissingTemplate in Projects#show
Missing partial tasks/show with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths .... around line #13
ありがとう
ファイル_show.js.erb
?
"Using Partials" から。
これを試すことができます。 JavaScriptパーシャルの代わりに、htmlを_show_js.html.erb
にして、JSコードをhtml <script>
タグで囲むことができます。
<script type='text/javascript'>
$("tasks").append(new TaskWidget(task.id))
</script>
そして、
<div id="tasks">
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %>
</div>
試してください:
render:partial => "tasks/show.js"
それを機能させるために、私はフォーマットを追加する必要がありました:
<script>
<%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
</script>
同じ問題かどうかはわかりませんが、Rails 3.で同様のことを行いました。たとえば、app/views/invoices/_select.html.erb
で部分的なビューを使用して、でビューにレンダリングする
<%= render:partial => "invoices/select"%>
何の問題もなく、私が置いたコントローラーの場合
render:partial => "invoices/select"
ブラウザでアクションを開くことができました。ajax呼び出しからアクションを呼び出そうとすると問題が発生し、ActionView::MissingTemplate
エラーが発生します。私が解決した唯一の方法は、ビューの名前を_select.rhtml
に変更することでしたが、すべて正常に機能しました。
問題は、Rails 3では、.jsファイルからのレンダリングがshow.js.erbまたはshow.erbの形式のファイルのみを探すことです。
これを回避するには、_show.js.erbファイルを作成する必要がありますが、これはパーシャルの目的に反するため、代わりにshow.html.erbファイルの名前をshow.erbに変更することもできます。
ただし、タイプが終了しないで標準のコントローラアクションを実行することは、おそらく悪い習慣です(例:show.erb)。
もし私があなたのパーシャルの名前を_show.html.erbの代わりに_tasks.erbのようなものに変更し、それからtasks/show.html.erbが必要なら、そのビューの中に_tasksパーシャルをレンダリングするだけでいいでしょう。