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

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

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

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

Q&A

解決済

1回答

405閲覧

パラメーターの受け渡しがうまく行かない【中間テーブル】

tomtom1

総合スコア168

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/03 13:07

編集2020/03/04 10:35

###実現したいこと
現在、Post ⇆ Group_Post ⇆ Group という形で、所属先のグループと所属するポストの関係を構築しております。
Postをグループに追加するにあたり、パラメーター値を期待される型で渡せていないため、下記のエラーが発生します。
こちらを解決したいです

error

1ActiveRecord::AssociationTypeMismatch in GroupsController#add 2Post(#70236412025920) expected, got nil which is an instance of NilClass(#70236376538660)

###コード

View

1<%= link_to("Post追加", "/group/#{@group.id}/add", method: :post, post: post) %>

Controller

1def add 2 @group = Group.find_by(id: params[:id]) 3 @post = Post.find_by(id: params[:post]) 4 @group.posts << @post 5 render :index 6 end

恐らく、Viewのlink_toでパラメーター定義がうまくできていないか、Contorllerで受け取りがうまくできていないため、nilになっていると思います。調べましたが、解決方法がわからずにいます。
お分かりの方、ぜひお願いいたします。
###追記
インデントがうまくできておらず申し訳ありません。
Routesを追記しました。
/group/:id/addのprefixは省略されていました。

routes

1post "group/:id/join" => "groups#join" 2post "group/:id/resign" => "groups#resign" 3get "group/:id/mypic" => "groups#mypic" 4post "group/:id/add" => "groups#add" 5resources :groups, only: [:index, :new, :show, :create, :edit, :update, :destroy]

console

1 POST /group/:id/join(.:format) groups#join 2 POST /group/:id/resign(.:format) groups#resign 3 GET /group/:id/mypic(.:format) groups#mypic 4 POST /group/:id/add(.:format) groups#add 5groups GET /groups(.:format) groups#index 6 POST /groups(.:format) groups#create 7new_group GET /groups/new(.:format) groups#new 8edit_group GET /groups/:id/edit(.:format) groups#edit 9group GET /groups/:id(.:format) groups#show 10 PATCH /groups/:id(.:format) groups#update 11 PUT /groups/:id(.:format) groups#update 12 DELETE /groups/:id(.:format) groups#destroy

###追記2
config/routes.rb

Rails.application.routes.draw do get "/login" => "users#login_form" post "login" => "users#login" post "logout" => "users#logout" post "users/:id/update" => "users#update" get "users/:id/edit" => "users#edit" post "users/create" => "users#create" get "signup" => "users#new" get 'users/index' => "users#index" get "users/:id" => "users#show" get 'posts/index' => "posts#index" get "posts/new" => "posts#new" get "posts/:id" => "posts#show" post "posts/create" => "posts#create" get "posts/:id/edit" => "posts#edit" post "posts/:id/update" => "posts#update" post "posts/:id/destroy" => "posts#destroy" post "group/:id/join" => "groups#join" post "group/:id/joinshow" => "groups#joinshow" post "group/:id/resign" => "groups#resign" get "group/:id/mypic" => "groups#mypic" post "group/:id/add" => "groups#add" resources :groups, only: [:index, :new, :show, :create, :edit, :update, :destroy] get "/" => "home#top" get "about" => "home#about" end

rails routes

Prefix Verb URI Pattern Controller#Action login GET /login(.:format) users#login_form POST /login(.:format) users#login logout POST /logout(.:format) users#logout POST /users/:id/update(.:format) users#update GET /users/:id/edit(.:format) users#edit users_create POST /users/create(.:format) users#create signup GET /signup(.:format) users#new users_index GET /users/index(.:format) users#index GET /users/:id(.:format) users#show posts_index GET /posts/index(.:format) posts#index posts_new GET /posts/new(.:format) posts#new GET /posts/:id(.:format) posts#show posts_create POST /posts/create(.:format) posts#create GET /posts/:id/edit(.:format) posts#edit POST /posts/:id/update(.:format) posts#update POST /posts/:id/destroy(.:format) posts#destroy POST /group/:id/join(.:format) groups#join POST /group/:id/joinshow(.:format) groups#joinshow POST /group/:id/resign(.:format) groups#resign GET /group/:id/mypic(.:format) groups#mypic POST /group/:id/add(.:format) groups#add groups GET /groups(.:format) groups#index POST /groups(.:format) groups#create new_group GET /groups/new(.:format) groups#new edit_group GET /groups/:id/edit(.:format) groups#edit group GET /groups/:id(.:format) groups#show PATCH /groups/:id(.:format) groups#update PUT /groups/:id(.:format) groups#update DELETE /groups/:id(.:format) groups#destroy GET / home#top about GET /about(.:format) home#about

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

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

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

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

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

guest

回答1

0

ベストアンサー

method: :post, post: post を  method: :post, post: post.id  
で試してください
それでだめでしたら、logを確認したい

まてこれではだめだ
"/group/#{@group.id}/add?post=#{post.id}" ですね
、、それより
rails routes して "/group/:id/add" というのをさがしてください。
add_group もしくは group_add という名前が付いているとおもいます。
仮に add_groupだったとします
"/group/#{@group.id}/add" の部分を add_group_path(@group, post: post.id)
にしてみてくだし
method: :post のあとの , post: post.id  は削除

投稿2020/03/03 16:13

編集2020/03/03 16:22
winterboum

総合スコア23333

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

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

tomtom1

2020/03/03 19:39

ありがおとうございます。 routesを確認しましたところ、prefixが表示されておりませんでした。 ですので、add_group_path(@group, post: post.id)とgroup_add_path(@group, post: post.id)を試しましたが、両方undefined method `group_add_path' for....のエラーが出てしまいます。 routesを追記しました、よろしくお願いします。
winterboum

2020/03/03 23:28

rails routes の結果を
tomtom1

2020/03/04 06:56 編集

わかりづらくてすいません! 追記に記載したconsole枠が、コンソールにて、rails routesした結果です。 わかりづらかったので、インデントを修正しました!
winterboum

2020/03/04 10:10

なんか変だな。これ一番上からもれなく出てます? 画面からあふれたのを漏らしているとかないですか? config/routes.rb も欲しいな。 "/group/#{@group.id}/add?post=#{post.id}"  で済ませる手もありますが
tomtom1

2020/03/04 10:36

やはりPrefixが存在しないのはおかしいのでしょうか?作成方法を間違えたのですかね..。 追記に、config/routes.rbとrails routesの全てを書きました。よろしくお願いします。
winterboum

2020/03/04 11:17

post "group/:id/add" => "groups#add" のように groups でないものがありますが、これは何か意図がありますか?
tomtom1

2020/03/04 11:28

いえ、意図はありません!一方は一行ずつ書き、もう一方はまとめてresources :groupsで書いていたので気づかずにいました。これが原因でしょうか?全てgroupsに書き換え、rails routesで確認しましたところprefixは現れませんでした。 resources :groups, only: [:index, :new, :show, :create, :edit, :update, :destroy]の中、全て入れた方がよろしいのでしょうか?
winterboum

2020/03/04 11:41

違いましたか。。。。 最後の手段は as: "add_group" ですが "
tomtom1

2020/03/04 12:10

残念ですが > < 。as: "add_group"の方法は、初めて拝見しましたが、どこでどのように使うものでしょうか? 試します。
tomtom1

2020/03/09 16:59

ご教示ありがとうございます!as:の攻略ができませんでしたので、 先日お教え頂いた、"/group/#{@group.id}/add?post=#{post.id}" の方法で済ませてしまいました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問