使用rails3 - 我有一个包含许多任务的项目。我想使用javascript为每个任务构建UI。我想我可以在项目展示页面上显示这些任务,方法是为每个任务渲染一个javascript。我无法获得'tasks / show'来查看任务/ show.js.erb任何想法?
在projects / 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
由于
答案 0 :(得分:26)
不应该在_show.js.erb
文件中吗?
答案 1 :(得分:10)
你可以试试这个。您可以使用html _show_js.html.erb
标记来创建一个html <script>
,而不是使用Javascript部分。
<script type='text/javascript'>
$("tasks").append(new TaskWidget(task.id))
</script>
和
<div id="tasks">
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %>
</div>
答案 2 :(得分:5)
尝试:
render:partial =&gt; “任务/ show.js”
答案 3 :(得分:4)
为了使其工作,我需要添加格式:
<script>
<%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
</script>
答案 4 :(得分:3)
嗯,我不知道是否是同一个问题,但是我对rails 3进行了类似的操作。我在app/views/invoices/_select.html.erb
中有一个局部视图,我能够在视图中呈现< / p>
&lt;%= render:partial =&gt; “发票/选择”%&gt;
没有任何问题,如果在控制器中我放置
render:partial =&gt; “发票/选择”
我能够在浏览器中打开操作,当我尝试从ajax调用调用操作时出现问题,然后我收到ActionView::MissingTemplate
错误。我发现解决的唯一方法是将视图重命名为_select.rhtml
,然后每件事都运行正常。
答案 5 :(得分:2)
问题是在Rails 3中,.js文件中的渲染只会查找show.js.erb或show.erb形式的文件
要解决这个问题,您需要创建一个_show.js.erb文件,但由于这种方法会破坏partials的目的,您可以将show.html.erb文件重命名为show.erb < / p>
但是,这可能是一种不好的做法,即在没有类型结束的情况下制作标准控制器动作(例如show.erb)
如果我是你,我会做的是将你的部分内容重命名为_tasks.erb而不是_show.html.erb,然后如果你需要一个任务/ show.html.erb你可以只将_tasks部分渲染到内部那个观点。