Rails를 통한 작업 관리 애플리케이션 생성8

13291 단어 RubyRails

미션 관리 앱 같이 만들자(계속)


1. 오프닝


1. 전제, 사전 작업

  • 이쪽 투고.
  • 예제포인트 설치의 베껴쓰기

  • #25 check_box_태그 쓰세요.부터 실시
  • 2. check_box_태그 쓰세요.

  • 확인란과 함께 진행률 관리

  • 놀다
  • jquery의ajax기능을 사용하여 처리
  • 복선상자를 클릭하면 aax를 통해 POST 처리
  • 클릭할 때마다 진, 가짜로 전환하는toggle
  • 이하, /home/vagrant/taskApp/app/views/projects 또는 show.html.erb를 쓰지 않으면 안 됩니다. (projodct id의 데이터, 또는 id의 데이터, 의미로)
  • 참고 자료
  • ERB(show.html.erb)
    
    <h1><%= @project.title %></h1>
    
    <ul>
        <!-- projectに紐付くtaskがあるだけループする -->
        <% @project.tasks.each do |task| %>
        <li>
            <!-- 進捗管理用チェックボックス -->
            <!-- idやvalueは不要なのでオプションはブランク -->
            <!-- task.done がチェックの有無を意味する(true, false) -->
            <!-- taskのIDとprojectのIDを属性として保持させて使えるようにする -->
            <%= check_box_tag '', '', task.done, {'data-id' => task.id, 'data-project_id' => task.project_id} %>
            <!-- taskのtitleを表示 -->
            <%= task.title %>
            <!-- 削除リンク(taskのプロジェクトIDとtaskIDを取得) -->
            <%= link_to "[Delete]", project_task_path(task.project_id, task.id), method: :delete, data: {confirm: "are you sure?"} %>
        </li>
        <% end %>
    
        <!-- 新規タスク登録フォーム -->
        <li>
            <%= form_for [@project, @project.tasks.build] do |f| %>
            <%= f.text_field :title %>
            <%= f.submit %>
            <% end %>
        </li>
    
    </ul>
    
    <!-- jqueryの機能を使ってチェックボックスの制御を行う -->
    <script type="text/javascript">
        $(function() {
            $("input[type=checkbox]").click(function() {
                $.post('/projects/'+$(this).data('project_id')+'/tasks/'+$(this).data('id')+'/toggle')
            })
        })
    </script>
    
    
  • 에 확인란이 추가되었습니다.
  • 소스 좀 봐...
  • HTML
        <!-- projectに紐付くtaskがあるだけループする -->
        <li>
            <!-- 進捗管理用チェックボックス -->
            <!-- idやvalueは不要なのでオプションはブランク -->
            <!-- task.done がチェックの有無を意味する(true, false) -->
            <!-- taskのIDとprojectのIDを属性として保持させて使えるようにする -->
            <input data-id="4" data-project_id="4" id="" name="" type="checkbox" value="" />
            <!-- taskのtitleを表示 -->
            task1
            <!-- 削除リンク(taskのプロジェクトIDとtaskIDを取得) -->
            <a data-confirm="are you sure?" data-method="delete" href="/projects/4/tasks/4" rel="nofollow">[Delete]</a>
        </li>
    
  • 확실히 속성 증가

  • 라우트가 정의되지 않았기 때문data-project_id 미리 정의
  • 특정 명령을 특정 동작과 연결하는 설정 증가
  • 놀림
  • data-id/projects/project_id/tasks/task_id/toggle
  • ruby(routes.rb)
    
      post 'projects/:project_id/tasks/:id/toggle' => 'task#toggle'
    
    
  • /home/vagrant/taskApp/config에서 라우트를 미리 업데이트
  • 다음 라우팅 추가
  • POST   /projects/:project_id/tasks/:id/toggle(.:format) task#toggle
    
  • 더 나아가routes.rbrake routes
  • ruby(tasks_controller.rb)
    
    class TasksController < ApplicationController
    
    
      # createアクションを追加
      def create
        # 画面からわたってきたIDからprojectをfindする
        @project = Project.find(params[:project_id])
        # taskを登録
        @task    = @project.tasks.create(tasks_params)
        # 遷移先はプロジェクト詳細画面
        redirect_to project_path(@project.id)
      end
      # destroyアクションを追加
      def destroy
          @task = Task.find(params[:id])
          @task.destroy
          redirect_to project_path(params[:project_id])
      end
      # toggleアクションを追加
      def toggle
          render nothing: true
          @task      = Task.find(params[:id])
          # タスクのdoneの値をひっくり返す
          @task.done = !@task.done
          @task.save
          # 下記でもいいけど、render nothing: true でOKなので、下記はコメントアウト
          # redirect_to project_path(params[:project_id])
      end
    
      private
        # task_params を定義
        def tasks_params
          # taskでわたってきたもののうち、titleだけ使用
          params[:task].permit(:title)
        end
    
    end
    
    
    
  • 동작을 확인한다.
  • 404 반환
  • 직접 열기 오류/home/vagrant/taskApp/app/controllers
  • 라우팅을 수행할 수 없습니다.어느
  • ruby(routes.rb)
    
      post 'projects/:project_id/tasks/:id/toggle' => 'task#toggle'
    
    
    *머리가 떨어졌다tasks_controller.rb.그리고 http://dev.com:3000/projects/5/tasks/3/toggle가 아니라 /가 옳다.추가 및 재실행
  • 오류가 사라졌습니다.(할애 포획)
  • 좋은 웹페이지 즐겨찾기