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でないかどうかを確かめるべし!