Form_forでNoMethodError,objectがnil
userとhas_many関係にあるprojects作成のformをform_for使って書いた時に起こったエラー&様々な修正
初期のコード
def create project = @user.projects.build do |t| t.project_id = params[:project_id] t.comment = params[:user][:comment] end if project.save flash[:notice] = 'このイベントに参加しました' head 201 else render json: {messages: project.errors.full_messages}, status: 422 end end
def show @user = User.find(session[:user_id]) end
=> Projectsがnilであるというエラーが返ってきた。。
最終的なコード
def create
@project = current_user.projects.build(project_params)
if @project.save
flash[:notice] = 'プロジェクトを追加しました。'
head 201
else
render json: {messages: project.errors.full_messages}, status: 422
end
end
def show
@user = User.find(params[:user_id])
@project = current_user.projects.build if logged_in?
end
private
def project_params
params.require(:project).permit(:name)
end
end
解決!
問題の根本は、project_idがparamsからnilで送られてくるためだった。t.project_id = params[:project_id]の部分をuser_idに変えてみたら出来てただろう、、
今回はbyebugが活躍。def createの真下にbyebugを置き、paramsの値を確かめまくった。
formでエラーになったら、まずはbyebugで求めているparamsの値がnilでないかどうかを確かめるべし!