20

rails3 の使用 - 多くのタスクを含むプロジェクトがあります。JavaScript を使用して、各タスクの UI を構築したいと考えています。それぞれの javascript パーシャルをレンダリングすることで、プロジェクトの表示ページにこれらのタスクを表示できると考えました。「tasks/show」で tasks/show.js.erb を表示できません

プロジェクト内/show.html.erb

<div id="tasks">
<%= render(:partial => "tasks/show", :collection => @project.tasks) %> 
</div>

タスク/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

ありがとう

4

6 に答える 6

28

それはファイルにあるべきではありません_show.js.erbか?

パーシャルを使う」より

于 2010-05-03T04:18:38.857 に答える
12

これを試すことができます。Javacript パーシャルの代わりに 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>
于 2011-07-21T17:07:55.303 に答える
7

それを機能させるには、次の形式を追加する必要がありました。

 <script> 
  <%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
  </script>
于 2016-02-24T03:20:58.103 に答える
5

試す:

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

于 2011-01-27T14:58:14.773 に答える
3

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

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

問題なく、コントローラーに配置した場合

render :partial => "invoices/select"

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

于 2010-11-05T17:18:22.377 に答える
2

問題は、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 部分をレンダリングするだけです。

于 2010-10-06T02:16:50.170 に答える