前提・実現したいこと
railsでtodoアプリを作成しています。
新しいタスクを入力する際に空白、31文字以上、同じタスクがある時の3つの場合でエラーメッセージを表示させたい
発生している問題
エラーメッセージが表示されません、、理由が全く分からないです。
よろしくお願いします。
該当のソースコード
todo.rb
class Todo < ApplicationRecord validates :content, presence: true,uniqueness: true, length: { maximum: 30 } end
routes.rb
Rails.application.routes.draw do get '/todos/search', to: 'todos#search' post '/todos/:id/done' => 'todos#done', as: 'done'#完了ボタン resources :todos # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: "todos#index" end
todos_controller.rb
class TodosController < ApplicationController before_action :set_todo, only: [:show, :edit, :update, :destroy,:done] # GET /todos # GET /todos.json def index @todos = Todo.all.order(created_at: :desc)#新しい順 @todo = Todo.new end # GET /todos/1 # GET /todos/1.json def show end # GET /todos/new def new @todo = Todo.new end # GET /todos/1/edit def edit end # POST /todos # POST /todos.json def create @todo = Todo.new(todo_params) respond_to do |format| if @todo.save format.html { redirect_to todos_url(@todo), notice: 'Todo was successfully created.' } format.json { render :show, status: :ok, location: @todo } else format.html { redirect_to todos_url(@todo.errors) } format.json { render json: @todo.errors, status: :unprocessable_entity } end end end # PATCH/PUT /todos/1 # PATCH/PUT /todos/1.json def update respond_to do |format| if @todo.update(todo_params) format.html { redirect_to @todo, notice: 'Todo was successfully updated.' } format.json { render :show, status: :ok, location: @todo } else format.html { render :edit } format.json { render json: @todo.errors, status: :unprocessable_entity } end end end # DELETE /todos/1 # DELETE /todos/1.json def destroy @todo.destroy respond_to do |format| format.html { redirect_to todos_url, notice: 'Todo was successfully destroyed.' } format.json { head :no_content } end end def done#完了ボタン if @todo.status=='undone' @todo.update(status:'done') else @todo.update(status:'undone') end redirect_to todos_url(@todo) end def search#検索 @todos = Todo.all.order(created_at: :desc)#新しい順 @todos2=@todos.where(['content LIKE ?', "%#{params[:search]}%"]) end private # Use callbacks to share common setup or constraints between actions. def set_todo @todo = Todo.find(params[:id]) end # Only allow a list of trusted parameters through. def todo_params params.require(:todo).permit(:content, :limit,:created_at,:status)#作成日時 #完了ボタン end end
index.html.erb
<p id="notice"><%= notice %></p> <h1><%= link_to 'todoリスト', todos_path %></h1> <h1><%= link_to '検索', todos_search_path %></h1> <%#ホームで入力%> <%= render 'form', todo: @todo %> <table> <thead> <tr> <th>Content</th> <th>Limit</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @todos.each do |todo| %> <tr> <td><%= todo.content %></td> <td><%= todo.limit %></td> <td><%= todo.created_at %></td><%#作成日時%> <td><%= button_to "#{todo.status}", done_path(todo), method: :post %></td><%#完了ボタン%> <td><%= link_to 'Show', todo %></td> <td><%= link_to 'Edit', edit_todo_path(todo) %></td> <td><%= link_to 'Destroy', todo, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br>
_form.html.erb
<%= form_with(model: todo, local: true) do |form| %> <% if todo.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(todo.errors.count, "error") %> prohibited this todo from being saved:</h2> <ul> <% todo.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :content %> <%= form.text_area :content, id: :todo_content %> </div> <div class="field"> <%= form.label :limit %> <%= form.date_select :limit, id: :todo_limit %> </div> <div class="actions"> <%= form.submit %> </div> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/01 14:39
2020/03/01 15:49