반응형
Rails 확인란 AJAX 호출, 아무것도 렌더링하지 않음
확인란을 클릭하면 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 파일을 가지고 있지 않고 프로토타입 자료를 제 정적인 자바스크립트 자료로 가져와서 보기에서 제외하고 싶습니다.
저는 레일즈가 처음이라 좀 더 쉬운 방법이 있을 겁니다. 하지만 저는 여기에 갇혀 있습니다.
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
편집: 레일 4/5에서 사용할 수 있습니다.head :ok
대신에render nothing: true
이렇게 하는 것이 더 바람직하지만 결과는 같습니다.
언급URL : https://stackoverflow.com/questions/5380300/rails-checkbox-ajax-call-dont-want-to-render-anything
반응형
'programing' 카테고리의 다른 글
Javascript를 사용하여 메타 새로 고침 태그 재정의 또는 비활성화 (0) | 2023.08.23 |
---|---|
빌드 프로세스가 없는 Vue.js 단일 파일 구성 요소 (0) | 2023.08.23 |
pjax는 어떻게 작동하나요? (0) | 2023.08.23 |
mysql에서 null 날짜를 확인하는 방법은 무엇입니까? (0) | 2023.08.23 |
파워셸 가져오기 모듈이 모듈을 찾지 못함 (0) | 2023.08.23 |