前提・実現したいこと
postとuserのuser_idの関連付けがうまくできずにいます。
progateのRuby on Rails5 学習コース Ⅸ 「 新規投稿をログインユーザーに紐付けよう」 のところで、投稿一覧にユーザー情報を表示ができずindex.html.erb で
undefined method `image_name' for nil:NilClassというエラーが発生しています。
postのuser_idは存在しているのですが、それに紐づいているはずのuser_idがnilとなっており、postに対しuser_idがうまく紐づいてくれません。また、postでuser_idを保存しようとしても保存できず、falseが返ってきます。
以下のpost.rbとuser.erbのコードでは関連づけられていないのでしょうか?
発生している問題・エラーメッセージ```NoMethodError in Posts#indexundefined method `image_name' for nil:NilClass
エラーメッセージ
```undefined method `image_name' for nil:NilClass
該当のソースコード
---post.rb---
class Post < ApplicationRecord
validates :content, {presence: true, length: {maximum: 140}}
validates :user_id, {presence: true}
belongs_to :user
end
---user.erb----
class User < ApplicationRecord
validates :name, {presence: true}
validates :email, {presence: true, uniqueness: true}
validates :password, {presence: true}
has_many :posts
end
---posts/index.html----
def index
@posts = Post.all.order(created_at: :desc)
end
def show
@post = Post.find_by(id: params[:id])
@user = @post.user
end
def new
@post = Post.new
end
def create
@post = Post.new(
content: params[:content],
user_id: @current_user.id
)
if @post.save flash[:notice] = "投稿を作成しました" redirect_to("/posts/index") else render("posts/new") end
end
def edit
@post = Post.find_by(id: params[:id])
end
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
if @post.save
flash[:notice] = "投稿を編集しました"
redirect_to("/posts/index")
else
render("posts/edit")
end
end
def destroy
@post = Post.find_by(id: params[:id])
@post.destroy
flash[:notice] = "投稿を削除しました"
redirect_to("/posts/index")
end
コード ### 試したこと```ここに言語を入力 コード ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/15 14:38
2018/03/15 14:56
2018/03/16 03:59
2018/03/21 08:13