質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1016閲覧

[rails]sessionを使わずに親モデルのidを子モデルに引っ張る

Osmm

総合スコア16

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/10/15 16:22

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/10/16 00:33

route設定はどのようになっていますでしょうか。
guest

回答1

0

ベストアンサー

form_tagのURL指定が"/users/:id/projects"となっていますが、これでは本当に/users/:id/projectsへアクセスしてしまいます。

"/users/#{@user.id}/projects"のように、IDを指定する必要があります。

投稿2018/10/16 00:36

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Osmm

2018/10/16 11:25

解決できました!! undefined methodエラーがそこから解決するとは盲点でした。 勉強になります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問