前提・実現したいこと
Railsで一つのUserに複数のProjectが紐づくTodoアプリを作成中。
Projectを作成した場合に、Userのidを自動で引っ張ってきたいです。
一対多のリレーションは記述済み。
画面の流れ: 「Userの一覧」->「単一Userの持つProject一覧」->「Project作成画面」
"session"や"current_user"を使わない方法でお願いします。
発生している問題・エラーメッセージ
Projectを新規作成する際に、Userのidが紐付いて来ません。
createメソッドにおいて、
下記のcontroller13行目で@userを定義しているのに
14行目のuser_id: @user.idから
"undefined method `id' for nil:NilClass"
が発生してしまう。
該当のソースコード
Rails
1--- 2#user.rb 3 1 class User < ApplicationRecord 4 2 has_many :projects 5 3 accepts_nested_attributes_for :projects 6 4 end 7 8#project.rb 9 1 class Project < ApplicationRecord 10 2 belongs_to :user, optional: true 11 3 end 12 13--- 14#projects_controllers.rb 15 7 16 8 def new 17 9 @user = User.find_by(id: params[:id]) 18 10 end 19 11 20 12 def create 21 13 @user = User.find_by(id: params[:id]) 22 14 @project = Project.new(name: params[:name], user_id: @user.id ) 23 15 @project.save 24 16 redirect_to("/") 25 17 end 26 27--- 28 #projects/new.html.erb 29 2 30 3 <%= form_tag("/users/:id/projects", :method => :post) do %> 31 4 <input name="name" value= "" > 32 5 <input type="submit" value="Create"> 33 6 <% end %> 34 7 <div> 35 8 <%= "user id is => #{@user.id}" %> 36 9 <%= @user.id.class %> 37 10 <%= link_to("Back to Home", "/")%> 38 11 </div> 39
試したこと
上記13行目に問題があると仮定し、newメソッド内で同様に定義してviewで引数と型を確認したが、そこでは期待した出力でした。
8 <%= "user id is => #{@user.id}" %> 9 <%= @user.id.class %> >>user id is => 2 Integer
補足情報(FW/ツールのバージョンなど)
Rails 5.1.6
回答1件
あなたの回答
tips
プレビュー