web-dev-qa-db-ja.com

Rails 3でpartial.jsをレンダリングする方法

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

ありがとう

19
Julian Mann

ファイル_show.js.erb

"Using Partials" から。

27
wombleton

これを試すことができます。 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>
10
cortex

試してください:

render:partial => "tasks/show.js"

5
xavi

それを機能させるために、私はフォーマットを追加する必要がありました:

 <script> 
  <%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
  </script>
5
htafoya

同じ問題かどうかはわかりませんが、Rails 3.で同様のことを行いました。たとえば、app/views/invoices/_select.html.erbで部分的なビューを使用して、でビューにレンダリングする

<%= render:partial => "invoices/select"%>

何の問題もなく、私が置いたコントローラーの場合

render:partial => "invoices/select"

ブラウザでアクションを開くことができました。ajax呼び出しからアクションを呼び出そうとすると問題が発生し、ActionView::MissingTemplateエラーが発生します。私が解決した唯一の方法は、ビューの名前を_select.rhtmlに変更することでしたが、すべて正常に機能しました。

3
ramontiveros

問題は、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パーシャルをレンダリングするだけでいいでしょう。

2
Michael Waxman