前提・実現したいこと
messageモデルとuserモデルのアソシエーションで、messageに紐づくユーザーの名前を書き出したい
発生している問題・エラーメッセージ
user.nameが定義されていないと出てしまう
Showing /Users/ryousuke/projects/chat-space/app/views/messages/_message.html.haml undefined method `name' for 3707:Fixnum Trace of template inclusion: app/views/messages/index.html.haml
該当のソースコード
haml
1//eachで変数を定義 2 .right-content__messages.clearfix 3 .right-content__messages__container 4 .right-content__messages__box 5 -@messages.each do |message| ←変数定義 6 = render partial:"message", locals:{message: message}
haml
1//部分テンプレで切り出し 2.right-content__messages__box 3 .right-content__messages__box__username 4 %h4 #{message.user_id.name}←問題の箇所 5 .right-content__messages__box__time 6 %p #{message.created_at} 7 .right-content__messages__box__content 8 %p #{message.content}
試したこと
・アソシエーションの確認
・外部キーの設定
・DB内データの有無確認
補足情報(FW/ツールのバージョンなど)
ruby
1class MessagesController < ApplicationController 2 def index 3 @groups = current_user.groups 4 @group = Group.find(1) 5 @messages = Message.where(group_id: params[:group_id]).order("created_at ASC") 6 end 7end
class Message < ApplicationRecord belongs_to :user belongs_to :group end
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :messages has_many :group_users has_many :groups, through: :group_users end
ActiveRecord::Schema.define(version: 20180507143441) do create_table "group_users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.integer "group_id" t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["group_id"], name: "index_group_users_on_group_id", using: :btree t.index ["user_id"], name: "index_group_users_on_user_id", using: :btree end create_table "groups", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["name"], name: "index_groups_on_name", using: :btree end create_table "messages", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "content", limit: 65535, null: false t.string "image" t.integer "user_id", null: false t.integer "group_id", null: false t.index ["group_id"], name: "fk_rails_841b0ae6ac", using: :btree t.index ["user_id"], name: "fk_rails_273a25a7a6", using: :btree end create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name", null: false t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_users_on_email", unique: true, using: :btree t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree end add_foreign_key "group_users", "groups" add_foreign_key "group_users", "users" add_foreign_key "messages", "groups" add_foreign_key "messages", "users" end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/07 15:22