Rails를 통한 작업 관리 애플리케이션 생성8
미션 관리 앱 같이 만들자(계속)
1. 오프닝
1. 전제, 사전 작업
#25 check_box_태그 쓰세요.부터 실시
2. check_box_태그 쓰세요.
놀다
/home/vagrant/taskApp/app/views/projects
또는 show.html.erb
를 쓰지 않으면 안 됩니다. (projodct id의 데이터, 또는 id의 데이터, 의미로)
<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>
<!-- 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
post 'projects/:project_id/tasks/:id/toggle' => 'task#toggle'
/home/vagrant/taskApp/config
에서 라우트를 미리 업데이트POST /projects/:project_id/tasks/:id/toggle(.:format) task#toggle
routes.rb
의rake routes
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
/home/vagrant/taskApp/app/controllers
post 'projects/:project_id/tasks/:id/toggle' => 'task#toggle'
*머리가 떨어졌다tasks_controller.rb
.그리고 http://dev.com:3000/projects/5/tasks/3/toggle
가 아니라 /
가 옳다.추가 및 재실행Reference
이 문제에 관하여(Rails를 통한 작업 관리 애플리케이션 생성8), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fujimohige/items/192d7a3c32e2acd42129텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)