前提・実現したいこと
railsの勉強を始めたばかりで、入門書の見本を見ながらコードを打ち込んでいます。
アソシエーションの項目で行き詰まり、どこが間違えているのかがわかりません。
発生している問題・エラーメッセージ
ActionView::Template::Error (undefined method `name' for nil:NilClass): 9: <tr> 10: <td><%= obj.id %></td> 11: <td><a href = "/messages/<%= obj.id %>"><%= obj.title %></a></td> 12: <td><%= obj.person.name %></td> 13: <td><a href = "/messages/edit/<%= obj.id %>">Edit</a><td> 14: <td><a href = "javascript:delData(<%= obj.id %>);">Delete</a></td> 15: </tr> app/views/messages/index.html.erb:12 app/views/messages/index.html.erb:8
該当のソースコード
app//views/messages/index.html.erb
<h1 class = "display-4 text-primary"> Message#index</h1> <p><%= @msg %></p> <table class = "table"> <tr> <th>Id</th><th>title</th><th>person</th><th colspan = "2"></th> </tr> <% @data.each do |obj| %> <tr> <td><%= obj.id %></td> <td><a href = "/messages/<%= obj.id %>"><%= obj.title %></a></td> <td><%= obj.person.name %></td> <td><a href = "/messages/edit/<%= obj.id %>">Edit</a><td> <td><a href = "javascript:delData(<%= obj.id %>);">Delete</a></td> </tr> <% end %> </table> <script> function delData(num){ if (confirm('このデータを削除しますか?')){ document.location = "/messages/delete/" + num; } return false; } </script>
app/models/message.rb
class Message < ApplicationRecord belongs_to :person validates :message, presence: {message: "を書いてください。"} end
app/views/people/show.html.erb
<h1 class = "display-4 taxt-primary">People#show</h1> <p><%= @msg %></p> <table class = "table"> <tr><th>Id</th> <td><%= @data.id %></td></tr> <tr><th>Name</th> <td><%= @data.name %></td></tr> <tr><th>Age</th> <td><%= @data.age %></td></tr> <tr><th>Mail</th> <td><%= @data.mail %></td></tr> <tr><th>Maessage</th> <td> <% if @data.message != nil then %> <% @data.message.each do |obj| %> <%= "「" + obj.title + "」" %> <% end %> <% end %> </td></tr> </table>
app/controllers/messages_controller.rb
class MessagesController < ApplicationController layout "messages" def index @msg = "Massage data." @data = Message.all end def show @msg = "Indexed data." @message = Message.find(params[:id]) end def add @msg = "Massege data." @message = Message.new end def create @message = Message.new message_params if @message.save then redirect_to "/messages" else render "add" end end def edit @msg = "edit data.[id = " + params[:id] + "]" @message = Message.find(params[:id]) end def update obj = Message.find(params[:id]) obj.update(message_params) redirect_to "/messages" end def delete obj = Message.find(params[:id]) obj.destroy redirect_to "/messages" end private def message_params params.require(:message).permit(:person_id, :title, :message) end end
試したこと
コードの打ち間違いが無いかはセルフチェックですが、何度も行いました。
people/showでは問題なくnameメソッドが呼び出せているため、モデル作成時の間違いでは
ないと考えています。
サーバーの再起動は行いました。
MessageControllee を載せてください