前提・実現したいこと
Railsを先日始めた者です。
Railsにて顧客情報を登録,編集する機能を作っています。
登録する機能まではなんとか実装できました。
発生している問題・エラーメッセージ
いざ顧客情報を編集し、完了を押すと
undefined method `update' for nil:NilClass
とエラーメッセージが表示されます。
該当のソースコード
home_controller.rb
class HomeController < ApplicationController def index @datas = Client.all end def register @clients = Client.new end def list @list = Client.all end def edit @clients = Client.find_by(id: params[:id]) end def create @clients = Client.create(name: params[:client][:name], phone: params[:client][:phone], rank: params[:client][:rank]) redirect_to("/") end def update @clients = Client.find_by(id: params[:client][:id]) @clients.update(name: params[:client][:name], phone: params[:client][:phone], rank: params[:client][:rank]) redirect_to("/home/list") end end
routes.rb
Rails.application.routes.draw do get '/' => 'home#index' get 'home/register' => 'home#register' get 'home/list' => 'home#list' get '/:id' => 'home#edit' patch '/home/update' => 'home#update' post 'home/create' => 'home#create' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end
register.html.erb(顧客情報をここで登録します)
<h2>顧客情報登録</h2> <%= form_for @clients,:url => {:action => :create} do |f| %> <%= f.label :"名前" %><%= f.text_field :name %><br> <%= f.label :"電話番号" %><%= f.text_field :phone %><br> <%= f.label :"ランク" %><%= f.select :rank,[["一般",1], ["上級",2], ["ゴールド",3]], :prompt => "選択してください" %><br> <br> <%= f.submit "決定", data: { confirm: "登録しますか?"} %> <% end %>
list.html.erb(ここで編集したい顧客の名前をクリックします)
<h2>顧客一覧</h2> <p>情報を編集したい顧客の名前を押して下さい</p> <% @list.each do |li| %> <%= link_to(li.name,"/#{li.id}") %><br> <% end %> <%= link_to('トップへ戻る','/') %>
edit.html.erb(実際に編集するページです)
<h2>顧客情報編集</h2> <%= form_for @clients,:url => {:action => :update} do |f| %> <%= f.label :"名前" %><%= f.text_field :name %><br> <%= f.label :"電話番号" %><%= f.text_field :phone %><br> <%= f.label :"ランク" %><%= f.select :rank,[["一般",1], ["上級",2], ["ゴールド",3]] %><br> <br> <%= f.submit "完了", data: { confirm: "編集を完了しますか?"} %> <% end %>
試したこと
home_controllerの
def update内の
@clients = Client.find_by(id: params[:client][:id])
を
@clients = Client.find_by(name: params[:client][:name])
にしたところ電話番号・ランクは変更できましたが、名前を変更すると
undefined method `update' for nil:NilClassが返ってきます。
初心者の拙い質問とは思いますが、ご教示いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
開発環境にはcloud9を使用しています。
ruby 2.6.0p
Rails 5.0.7.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/09 11:21