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

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

ただいまの
回答率

90.48%

  • Ruby

    7919questions

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

  • Ruby on Rails

    7471questions

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

  • MySQL

    5996questions

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

  • CentOS

    2761questions

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

  • Vagrant

    1223questions

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

RailsでModule::DelegationErrorの解決方法を教えてください。

解決済

回答 1

投稿

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

koume

score 204

RailsでWebアプリケーション制作の勉強中です。
以下のようなエラーが出てしまい、解決できずに困っております。
発生したエラー

Module::DelegationError in Staff::Customers#show
Showing /home/vagrant/chibi/chibi/app/views/staff/customers/show.html.erb where line #31 raised:
・
・
・
Extracted source (around line #2):

1class BankPresenter < ModelPresenter
2.  delegate :bk_name, :office, :account, :acc_name, :acc_name_kana,
3to: :object
4end

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

Application Trace | Framework Trace | Full Trace
app/presenters/bank_presenter.rb:2:in `rescue in bk_name'
app/presenters/bank_presenter.rb:2:in `bk_name'
app/views/staff/customers/show.html.erb:31:in `_app_views_staff_customers_show_html_erb__3769675942398676322_69850436968820'
R


エラー発生コード

app/presenters/bank_presenter.rb

class BankPresenter < ModelPresenter
  delegate :bk_name, :office, :account, :acc_name, :acc_name_kana,
      to: :object
end
app/views/staff/customers/show.html.erb

<% @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>   ←ここでエラー発生(31行目)
    <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>


発生したModule::DelegationError in Staff::Customers#showの内容がわからないのでどなたか教えていただけないでしょうか?
宜しくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

delegate メソッド名, to: :objectとすると、「このオブジェクトの『メソッド名』の呼び出しを、.objectの結果に対する呼び出しに変換する」という意味になります。

Module::DelegationErrorは、.objectを呼んで、

  • そもそもメソッドがなかった場合、あるいはprivateprotectedだった場合
  • .objectnilだったなどで、対象のメソッドを呼べなかった場合

に発生します。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/12 13:14

    回答ありがとうございます。banksテーブルにデータを何も投入していないのが原因?と思いましたので、データを投入してからリロードしてみます。

    キャンセル

  • 2017/09/12 13:46

    nilが原因であれば、allow_nil: trueとすることで、デリゲーション先がnilでも黙ってnilを返すようにする、という解決策もあります。

    キャンセル

  • 2017/09/12 14:16

    ありがとうございます。早速試してみます。

    キャンセル

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

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

関連した質問

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

  • Ruby

    7919questions

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

  • Ruby on Rails

    7471questions

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

  • MySQL

    5996questions

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

  • CentOS

    2761questions

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

  • Vagrant

    1223questions

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