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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

1319閲覧

updateメソッドでundefined method `update' for nil:NilClassが返ってくる

kento735

総合スコア10

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/05/09 04:54

編集2019/05/09 11:17

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

edit.html.erb の form_for ~ end 内のどこかに <%= f.hidden_field :id %> を追加してみるとどうでしょうか。

投稿2019/05/09 10:10

iwamot

総合スコア1154

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

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

kento735

2019/05/09 11:21

言われた通り追加してみると無事編集ができました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問