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

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

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

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

Q&A

1回答

2347閲覧

【rails】undefined method `model_name' for nil:NilClassのエラーを解決したい

YousukeTanaka

総合スコア79

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/03/10 10:58

編集2018/03/11 07:42

表題の件の解決に時間がかかっており、ご助言をお願いしたい次第です。

実現したいこと。

現在、練習でQ&Aサイトを作成しています。Answerは、特定の専門家だけが返答できるようにし、userモデルとは別に、adviserモデルを作成しています。現在、adviserの管理画面を作成しており、その画面で、adviserが回答を行い、投稿されたquestionにadviserたちのanswerが表示される状態を実現したいと考えています。


問題点

以下のようなエラーが出ていますが、参考サイトを参考にしても、一向に解決しません。
イメージ説明


routes

scope module: :adviser do get '/advisers' => "application#index", as: "advisers_root" resources :advisers, only: [:show] resources :questions, only: [:index, :show] resources :answers, only: [:index, :new, :create, :show, :edit, :update, :destroy] end

model

adviser model has_many :answers, dependent: :destroy answer model belongs_to :adviser

Answers Controller

def new @answer = current_adviser.answers.build end def create # 該当するquestionのidを取得 @answer = current_adviser.answers.build(answer_params) if @answer.save! flash[:notice] = "This answer is succesfully created." redirect_to answer_path else flash[:alert] = "This answer failed to be created." render 'new' end end def show @question = Question.find(params[:question_id]) @answer = @question.answers.find(params[:id]) end private def answer_params params.require(:answer).permit(:content, :question_id, :adviser_id) end

HTML

<div class="row"> <div class="col-sm-2"> <%= render 'adviser/verticalnavbar' %> </div> <div class="col-sm-10 admin-question"> <header> <h3><%= @question.title %></h3> </header> <!-- <table class="table table-striped table-responsive"> --> <h3>Question</h3> <ul class="actions"> <li><%= link_to "Make Answer", class:"btn btn-primary" %></li> </ul> <div class="container-padding border-all-solid"> <p class="content-line"><%= @question.content %></p> </div> <hr> <% if @question.status? == false then %> <div class="answer_form"> <%= render 'form', answer: @answer %> </div> <% end %> <!-- </table> --> <div class="text-center" style="clear: both;"> <!-- pagination --> </div> </div> </div>

_form.html.erb

<%= simple_form_for [:adviser, answer],:url => adviser_answers_path, :method => :post do |f| %> <%= f.input :adviser_id, :as => :hidden, :input_html => { value: answer.adviser_id } %> <%= f.input :content, as: :text,:input_html => { :class => 'question-content', :rows => '10' } %> <%= f.button :submit, class: "btn btn-primary" %> <% end %>

推測ですが、[:adviser, answer]で、adviserモデルとanswerモデルでアソシエーションを設定しているので、
この部分が誤りではないかと思っています。しかし、namespaceのケースで、例えば、[:adviser, adviser, answer]など、いろいろと試したのですが、結果、うまくいきませんでした。
何卒お力添えをお願いいたします。

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

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

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

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

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

guest

回答1

0

エラーの種類としては**model_nameというメソッドが定義されてないよ**というものです

model_nameというメソッドを使用、もしくは定義しているところで、うち間違いがないかを
確認してください
(経験則ですが、関数名でタイプミスをしていたという場合がかなり多いです…)

投稿2018/03/11 04:11

FumiakiNakao

総合スコア180

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

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

YousukeTanaka

2018/03/11 05:09

アドバイスありがとうございます。早速確認いたします。感謝しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問