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

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

ただいまの
回答率

90.76%

  • Ruby

    7049questions

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

  • Ruby on Rails

    6755questions

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

  • MySQL

    5529questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CentOS

    2562questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Vagrant

    1118questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Railsのエラーでundefined method `bk_name' for nil:NilClassの解決方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 170

koume

score 198

Rails5.1.3でWebアプリケーションを勉強しながら作成しています。学習を進めていく中でアカウントの詳細を表示しようとしています。
以下のshow.html.erbで基本情報と、自宅住所は表示できていました。それで、入金口座の情報を表示しようとして見よう見まねでコードを記述していましたが、エラーが出てしまい対応できずに困っております。
エラー内容

NoMethodError in Staff::Customers#show
Showing /home/vagrant/chibi/chibi/app/views/staff/customers/show.html.erb where line #31 raised:

undefined method `bk_name' for nil:NilClass
Extracted source (around line #5):            

4  def bk_name
5    object.bk_name
6  end
7  
8  def office

Rails.root: /home/vagrant/chibi/chibi

Application Trace | Framework Trace | Full Trace
app/presenters/bank_presenter.rb:5:in `bk_name'
app/views/staff/customers/show.html.erb:31:in `_app_views_staff_customers_show_html_erb__418130021577735313_70033977357300'
<% @title = '顧客詳細情報' %>
<h1><%= @title %></h1>

<div class="table-wrapper">
  <table class="attributes">
    <tr><th colspan="2">基本情報</th></tr>
    <% p1 = CustomerPresenter.new(@customer, self) %>
    <tr><th>氏名</th><td><%= p1.full_name %></td></tr>
    <tr><th>フリガナ</th><td><%= p1.full_name_kana %></td></tr>
    <tr><th>生年月日</th><td class="date"><%= p1.birthday %></td></tr>
    <tr><th>性別</th><td><%= p1.gender %></td></tr>
    <tr><th>ニックネーム</th><td><%= p1.nickname %></td></tr>
    <tr><th>紹介者</th><td><%= p1.sponsor1 %></td></tr>
    <tr><th>登録日時</th><td class="date"><%= p1.created_at %></td></tr>
    <tr><th>更新日時</th><td class="date"><%= p1.updated_at %></td></tr>
    <tr><th>個人電話番号(1)</th><td><%= p1.personal_phones[0] %></td></tr>
    <tr><th>個人電話番号(2)</th><td><%= p1.personal_phones[1] %></td></tr>
    <% if @customer.home_address %>
      <% p2 = AddressPresenter.new(@customer.home_address, self) %>
      <tr><th colspan="2">自宅住所</th></tr>
      <tr><th>郵便番号</th><td><%= p2.postal_code %></td></tr>
      <tr><th>都道府県</th><td><%= p2.prefecture %></td></tr>
      <tr><th>市区町村</th><td><%= p2.city %></td></tr>
      <tr><th>町域、番地等</th><td><%= p2.address1 %></td></tr>
      <tr><th>建物名、部屋番号等</th><td><%= p2.address2 %></td></tr>
      <tr><th>自宅電話番号(1)</th><td><%= p2.phones[0] %></td></tr>
      <tr><th>自宅電話番号(2)</th><td><%= p2.phones[1] %></td></tr>
    <% end %>
    <% p3 = BankPresenter.new(@customer.bank, self) %>
    <tr><th colspan="2">入金口座</th></tr>
    <tr><th>銀行名</th><td><%= p3.bk_name %></td></tr>
    <tr><th>支店名</th><td><%= p3.office %></td></tr>
    <tr><th>口座番号</th><td><%= p3.account %></td></tr>
    <tr><th>口座名義</th><td><%= p3.acc_name %></td></tr>
    <tr><th>口座名義(カナ)</th><td><%= p3.acc_name_kana %></td></tr>
  </table>
</div>
class BankPresenter < ModelPresenter
  delegate :bk_name, :office, :account, :acc_name, :acc_name_kana, to: :object

  def bk_name
    object.bk_name
  end

  def office
    object.office
  end

  def account
    object.account
  end

  def acc_name
    object.acc_name
  end

  def acc_name_kana
    object.acc_name_kana
  end
end


エラーコードのundefined method `bk_name' for nil:NilClassなんなのかわからず、解決できずにいます。
banksテーブルに表示したいデータは入っております。初心者なのでコードの記述に問題があるとは思いますが、
どなたか解決方法を教えていただけないでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

原因はわかりませんでしたが、いろいろコードを直していたら表示できました。
何が原因だったのか調べてみます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7049questions

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

  • Ruby on Rails

    6755questions

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

  • MySQL

    5529questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CentOS

    2562questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Vagrant

    1118questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。