質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

404閲覧

Ruby on Rails でデータを区別して処理する方法についてお教え願いたいです。

kioak

総合スコア20

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/07/01 07:38

編集2018/07/01 14:04

Ruby on Rails初心者です。現在Todoアプリを制作しています。

各タスクに[todoにする] [doneにする]
という機能を持たせたいのです。teratailの他の質問者様のコードなどを参考にさせていただきながら書いたのですが、flag、whereの使い方がいまいちわからず、エラーが出ており、ネットで検索をかけても検索が下手なのか思うような情報が得られませんでした。

todoリストの方には todo_task
doneリストの方には done_task を表示して、各タスクを行き来できるようにさせたいというのが目標です。

出ているエラーはActiveRecord::StatementInvalid in Tasks#indexというものです。
データベースに存在するデータにflagという値を設定していないのが原因かな と思うのですが、どうやって設定などすればよいのでしょうか。

ご教授よろしくお願いいたします。

イメージ説明

.schema

以下が現在書いているコードです。

routes.rb

1Rails.application.routes.draw do 2 get "tasks/index" => "tasks#index" 3 get "tasks/:id/edit" => "tasks#edit" 4 post "tasks/create" => "tasks#create" 5 post "tasks/:id/update" => "tasks#update" 6 patch "tasks/:id/toggle_status", to: "tasks#toggle_status", as: :toggle_status_task 7 8 get "/" => "tasks#index" 9 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 10end 11

tasks_controller.rb

1class TasksController < ApplicationController 2 3 def index 4 #@tasks = Task.all 5 @task_todo = Task.where(flag: 0) 6 @task_done = Task.where(flag: 1) 7 @task = Task.new 8 end 9 10 def create 11 @tasks = Task.all 12 @task = Task.new(name: params[:name], 13 content: params[:content]) 14 if @task.save 15 flash[:notice] = "Success: 作成しました" 16 redirect_to("/tasks/index") 17 else 18 flash[:notice] = "Error: 作成できませんでした" 19 render("tasks/index") 20 end 21 end 22 23 def edit 24 @task = Task.find_by(id: params[:id]) 25 end 26 27 def update 28 @task = Task.find_by(id: params[:id]) 29 @task.content = params[:content] 30 @task.name = params[:name] 31 if @task.save 32 flash[:notice] = "Success:更新しました" 33 redirect_to("/tasks/index") 34 else 35 flash[:notice] = "Error:更新できませんでした" 36 render("tasks/edit") 37 end 38 end 39 40 def toggle_status 41 @task = Task.find_by(id: params[:id]) 42 if @task.flag == 0 43 @task.update_attribute(:flag, 1) 44 else 45 @task.update_attribute(:flag, 0) 46 end 47 redirect_to("/tasks/index") 48 flash[:notice] = "Success: 更新しました" 49 end 50 51 52end

index.html.erb

1<% if flash[:notice] %> 2 <p><%= flash[:notice] %></p> 3<% end %> 4 5 6 7<h1>Todoアプリ<h1> 8 <!--タスク作成コマンド--> 9 <div class="input_name_todo"> 10 <%= form_tag("/tasks/create") do %> 11 <label for="task_name">Name</label> 12 <textarea name="name"></textarea> 13 <label for="task_content">Content</label> 14 <textarea name="content"></textarea> 15 <input type="submit" value="作成"> 16 <% end %> 17 </div> 18 19 20 21 <div class="index-page_tasks"> 22 23 <!--todo_tasks--> 24 <div class="index-page_tasks-list"> 25 <h2>TODO</h2> 26 <div class="task-list"> 27 <% @task_todo.each do |task| %> 28 <div class="task-list__item-task"> 29 <div class="task_name"><%= task.name %></div> 30 <div class="task_content"><%= task.content %></div> 31 <div class="task_buttons"> 32 <div class="task_edit"> 33 <%= link_to("編集", "/tasks/#{task.id}/edit") %> 34 </div> 35 <div class="task_toggle"> 36 <%= link_to("DONEにする", "/tasks/#{task.id}/toggle_status", {method: "patch"}) %> 37 </div> 38 </div> 39 <% end %> 40 </div> 41 </div> 42 </div> 43 44 <!--done_tasks--> 45 <div class="index-page_tasks-list"> 46 <h2>DONE</h2> 47 <div class="task-list"> 48 <% @task_done.each do |task| %> 49 <div class="task-list__item-task"> 50 <div class="task_name"><%= task.name %></div> 51 <div class="task_content"><%= task.content %></div> 52 <div class="task_buttons"> 53 <div class="task_edit"> 54 <%= link_to("編集", "/tasks/#{task.id}/edit") %> 55 </div> 56 <div class="task_toggle"> 57 <%= link_to("TODOにする", "/tasks/#{task.id}/toggle_status", {method: "patch"}) %> 58 </div> 59 </div> 60 <% end %> 61 </div> 62 </div> 63 </div> 64 65 </div> 66

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryochin

2018/07/01 09:36

単純に flag というカラムが無いのでしょう。rails db して .schema と打った結果を示して下さい。
kioak

2018/07/01 14:04

画像を追加いたしました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

tasks テーブルに flag というカラムが存在しないので、Task.where(flag: 0) のようには指定できません。flag カラムを追加するには

bundle exec rails g migration AddFlagToTask

等を実行し、作成されたファイルを編集して

bundle exec rails db:migrate

してみてください。ついでに、flag カラムは boolean として定義したほうがいいように思います。

投稿2018/07/01 14:23

ryochin

総合スコア280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kioak

2018/07/03 13:17

ご回答ありがとうございます!教えてくださったことをベースに調べながらやって、希望する動作が実装できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問