Rails 复选框 AJAX 调用,不想渲染任何东西
Posted
技术标签:
【中文标题】Rails 复选框 AJAX 调用,不想渲染任何东西【英文标题】:Rails checkbox AJAX call, don't want to render anything 【发布时间】:2011-07-19 19:32:18 【问题描述】:我有一个小演示设置,其中单击复选框可通过 AJAX 切换属性。它工作正常,但 Rails 真的想渲染一些东西,所以我基本上求助于在我的视图中创建一个空白的 toggle.js.erb 文件。
有问题的控制器操作:
def toggle
@task = Task.find(params[:id])
respond_to do |format|
format.js do
if (@task.status != true)
@task.status = true
else
@task.status = false
end
@task.save
render :layout => false
end
end
end
有问题的视图:
<h1>Tasks</h1>
<ul style="list-style-type: none;">
<% @tasks.each do |task| %>
<li id="<%= dom_id(task) %>">
<%= check_box_tag(dom_id(task), value = nil, checked = task.status) %>
<%= task.action %> <%= link_to 'Edit', edit_task_path(task) %>
<%= link_to 'Delete', task, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
</li>
<% end %>
</ul>
<%= link_to 'New Task', new_task_path %>
<script>
$$('input').each(function(el)
el.observe('click', function(event)
// Get the task ID
var elId = el.id.split("_")[1];
// Build the toggle action path
var togglePath = '/tasks/' + elId + '/toggle/';
// Create request, disable checkbox, send request,
// enable checkbox on completion
new Ajax.Request(togglePath,
onCreate: function()
el.disable();
,
onSuccess: function(response)
,
onComplete: function()
el.enable();
);
);
);
</script>
没有我在视图中的空白 toggle.js.erb 文件,Rails 仍然给我一个错误,说它正在尝试渲染某些东西。
最终,我希望两者都不必有一个空白的 toggle.js.erb 文件,并且我希望将 Prototype 内容放入我的静态 javascript 内容中并移出视图。
我对 Rails 很陌生,所以可能有一种更简单的方法可以做到这一点,但我有点卡在这里。
【问题讨论】:
【参考方案1】:render :layout => false
表示您要渲染“切换”视图而无需布局。
如果你根本不想渲染任何东西,你应该使用:nothing => true
选项
def toggle
@task = Task.find(params[:id])
@task.toggle! :status
# if it used only by AJAX call, you don't rly need for 'respond_to'
render :nothing => true
end
编辑:在 Rails4/5 中,您可以使用 head :ok
而不是 render nothing: true
,这是更可取的方法,但结果是一样的。
【讨论】:
谢谢!这绝对有效。你的切换方法比我的好得多。上一个帖子中的某个人提出了有人向复选框发送垃圾邮件可能会影响切换的准确性的担忧,但我刚刚做到了,以便在单击后禁用复选框,直到 AJAX 事件返回成功。 完美 :) 如果您需要设置状态码并立即从控制器方法返回:render :nothing => true, :status => 404 and return
希望对您有所帮助!以上是关于Rails 复选框 AJAX 调用,不想渲染任何东西的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails3 中选中或取消选中时,如何让复选框触发 ajax 调用?
Rails 6.0.4 远程:true 不在浏览器中 js/ajax 渲染 _partial.html.erb