提问人:Mark Soden 提问时间:12/15/2013 最后编辑:helmbertMark Soden 更新时间:5/27/2015 访问量:247
Ruby on Rails:使用不显眼的 JavaScript 更新部分时出错
Ruby on Rails: error when using unobtrusive JavaScript to update partial
问:
我正在使用 Rails 3.2.13,并且我正在尝试在创建“子”项后更新“摘要”部分。
我有一个模板和模板任务,我正在尝试做的是更新“显示”视图上的部分,这是一个摘要,指示分配给模板的任务数量。我在模板任务中执行此操作。create.js.erb
以下是以下内容:_template-summary.html.erb
<div id="template-summary-details">
<table class="table table-striped">
<tbody>
<tr>
<td><span class="fa fa-th-list"></span> No. of tasks</td>
<td><%= @template.templatetasks.count %></td>
</tr>
<tr>
<td><span class="fa fa-clock-o"></span> Total task days</td>
<td>
<%= @template.templatetasks.sum(:days) %>
</td>
</tr>
<tr>
<td><span class="fa fa-check-square-o"></span> No. of checklists</td>
<td>
<%= @template.templatetasks.count(:checklist_id) %>
</td>
</tr>
</tbody>
</table>
</div>
以下是以下内容:create.js.erb
<% @template = Template.where("id = ?", @templatetask.template_id?) %>
$("#template-summary-details").replaceWith("<%= escape_javascript(render partial: "templates/template-summary", locals: {template: @template}) %>");
<% if @templatetask.parent_id? %>
$('#templatetasks'+<%= @templatetask.parent_id %>).prepend('<%= j render(@templatetask) %>');
<% else %>
$('#templatetasks').prepend('<%= j render(@templatetask) %>');
<% end %>
问题是我收到以下错误:
undefined method `where' for ActionView::Template:Class
我也尝试过使用,但也没有让它起作用。find
在创建模板任务期间,我将如何将其传递给部分?@template
答:
2赞
Steve
12/15/2013
#1
第一个问题是 Rails 类 ActionView::Template
和模型类之间存在名称冲突。您可以通过将模型类称为(顶级 Ruby 类)来解决此问题。例如Template
::Template
<% @template = ::Template.where("id = ?", @templatetask.template_id).first %>
但这只是进行主键查找的一种迂回方式,它更简单:find
<% @template = ::Template.find(@templatetask.template_id) %>
更简单的是,如果您已经设置了 from 的关联,则可以直接引用相关对象:belongs_to
TemplateTask
Template
<% @template = @templatetask.template %>
这可能会让你走得更远,但如果你想使你的部分更可重用,最好避免让它们引用实例变量(例如)。相反,部分应该引用您通过哈希传递到方法中的局部变量(您已经在这样做了)。@template
template
render
locals
评论
0赞
Mark Soden
12/18/2013
感谢您的回复。.设法让它工作;)
评论