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

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

ただいまの
回答率

89.08%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 131

tomtom1

score 120

実現したいこと

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

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

コード

<%= link_to("Post追加", "/group/#{@group.id}/add", method: :post, post: post) %>
def add
    @group = Group.find_by(id: params[:id])
    @post = Post.find_by(id: params[:post])
    @group.posts << @post
    render :index
  end


恐らく、Viewのlink_toでパラメーター定義がうまくできていないか、Contorllerで受け取りがうまくできていないため、nilになっていると思います。調べましたが、解決方法がわからずにいます。
お分かりの方、ぜひお願いいたします。

追記

インデントがうまくできておらず申し訳ありません。
Routesを追記しました。
/group/:id/addのprefixは省略されていました。

post "group/:id/join" => "groups#join"
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]
          POST   /group/:id/join(.:format)                                                                groups#join
          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

追記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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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/04 21:10

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

    キャンセル

  • 2020/03/04 23:19

    例えば https://guides.rubyonrails.org/routing.html にて
    as: を探してください

    キャンセル

  • 2020/03/10 01:59

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

    キャンセル

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

  • ただいまの回答率 89.08%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る