Rails复选框AJAX调用,不想呈现任何内容 [英] Rails checkbox AJAX call, don't want to render anything
问题描述
我进行了一些演示,其中单击复选框可以通过AJAX切换属性。它工作正常,但Rails确实想渲染一些东西,因此我基本上是在视图中创建空白的toggle.js.erb文件。
I've got a little demo setup in which clicking a checkbox toggles an attribute via AJAX. It's working fine, but Rails REALLY wants to render something, so I've basically resorted to creating a blank toggle.js.erb file in my views.
控制器操作有问题:
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仍然给了我
Without the blank toggle.js.erb file I've got in the views, Rails still gives me an error saying that it's trying to render something.
最终,我不想都不必拥有空白的toggle.js.erb文件,而我想想要将Prototype内容放入我的静态JavaScript内容中并从视图中移出。
Ultimately, I'd like to both not have to have a blank toggle.js.erb file, and I'd like to get that Prototype stuff into my static JavaScript stuff and out of the view.
我对Rails还是很陌生,所以可能有一种更简单的方法,但我有点卡在这里。
I'm pretty new to Rails, so there's probably an easier way to be doing this, but I'm kind of stuck here.
推荐答案
render:layout => false
表示您要在不使用布局的情况下渲染切换视图。
render :layout => false
means that you want to render 'toggle' view without layout.
如果您根本不希望渲染任何内容,则应使用:无=> true
选项
If you don't want render anything at all, you should use :nothing => true
option
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
代替什么都不渲染:true
,这样做更可取,但是结果是一样的
In Rails4/5 you can use head :ok
instead of render nothing: true
, it's more preferable way to do this, but result is the same.
这篇关于Rails复选框AJAX调用,不想呈现任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!