programing

Rails 확인란 AJAX 호출, 아무것도 렌더링하지 않음

telecom 2023. 8. 23. 21:35
반응형

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

반응형