こちら(teratail)ではじめて質問させていただきます。
このような技術的な質問をさせていただくのは今回が初めてですので、「もっとこういう質問の仕方をした方がいい」というようなことがありましたらご指摘ください。
●私のプログラミング歴
プログラミングには興味がありましたので、これまでC言語をはじめとしてjava,ruby,データベース関連など様々な言語の本を読書感覚で読んでいて、プログラミングの大まかな概念は理解しているつもりです
今回、何か実際にアプリを作ってみようと考え、チュートリアルサイトを読んだ後、「Ruby on Rails」でオリジナルアプリ(掲示板)実装をしていたところです
●今回の質問言語
Ruby on Rails
●開発環境
Windows10
Ruby version 2.1.8
Ruby on Rails version 4.2.6
データベース sqlite3
●質問内容
私がチュートリアルとして参考にしたサイトはシラバス(https://cyllabus.jp/courses/r9NBvH810khxpaN4PmQPTQ)です。
このページの「スレッドの個別ページ作成(Boards#show)」という項目の中の
@board = Board(params[:id])
モデルから指定したidを取得して、show(View)で表示する時、<%= @board.title%>などのように「インスタンス.データベースカラム名」という記述でデータを表示させたいのですが、「NoMethodError in Boards#showundefined method `title' for nil:NilClass」 このようなエラーが表示されます
●自分なりに解決策を模索した工程
1.上記のチュートリアルは読み流した程度の状態(実際に打ち込んで動かしてみたわけではない)状態でオリジナルアプリの実装を開始しました
2.最初は順調だったが、質問内容と同じ「params[:id]」を用いて、データベースから特定idのデータをひっぱり、show(View)で表示させようとしたときに、上記と同じエラー「No MethodError」が発生する
3.インスタンス(上でいう@board)にデータが代入されていないのではないか? という仮説が浮かんだのでshow(View)に
<% if @lady.present? %> <p> <strong>Title:</strong> <%= @lady.name %> </p> <p> <strong>Text:</strong> <%= @lady.region %> </p> <% else %> <p>There is no posts to show</p> <% end %> <hr>
<%= @インスタンス.present?%>
というコードを挿入し、もしインスタンスにデータが代入されていなければ「There is no posts to show」という文章が表示されるようにしてみた
3.上の条件で再度、一覧ページ→個別ページ(View)の段階をテストしてみると正常に稼働し「There is no posts to show」が表示される
→ つまりインスタンスにデータが格納されていないことが特定できた
4.私のコードの他の部分に不備があったのではないかと考え、1度先ほどのシラバスのチュートリアルサイトを実装してみた(完全にコピペで入力したので写し間違え等はないです)
5. 4の結果、やはり私がオリジナルアプリでつまづいたところと同じところでつまづき、同じエラーが表示される 「NoMethodError in Boards#showundefined method `title' for nil:NilClass」
6.今に至る
以上の結果から、やはりインスタンスにデータが保存されていないことが原因でno method Errorが出るのではないかと考えているのですが、なぜ保存されないのか(チュートリアル通りやっても)がわかりません
railsのバージョンによって記述法が異なるのか、他に原因があるのか
どうかご教授ください
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。