ページ

2020年1月20日月曜日

【Rails】自作アクションで" Couldn't find Item with 'id' = "「id」が見つからない!?

●7つのアクション


resourcesを使う事で7つのアクションが簡単に定義できますね😁

resources :hoges

この記述で、hogesコントローラーに対して、
index, new, create, show, edit, update, destroyの7つのルーティングを設定した事になります。

resources :hoges, only: [:index, :show]

上のようにonlyを記述して、指定したアクションだけを定義することもできます。

●自分でアクションを定義することもできます


今回に本題はここから!
7つのアクション以外にも自分でアクションを定義することもできます。
その中で、下のようなエラーが出ました!!!


「id」を見つけて来れなかったと言ってますね。。。。
idが分からんといっているので、パスにidが設定されているか、コントローラーにidを探して持ってくる記述をしているか確認します。

def selling
@item = Item.find(params[:id])
@images = @item.images
end

- @items.each do |item|
  = link_to selling_mypage_path(item.id), class: "selling_my_item" do
  .item_screen__box__items

問題なさそう。。。

●自作アクションで「全てのデータを取ってくるのか」「特定のデータを取ってくるのか」を定義する


今回の問題は、routes.rbへの記述の仕方でした。
自作アクションの場合、それに特定にのidを指定するかどうかが鍵になります。

resources :リソース名 do
member do
HTTPメソッド名 'アクション名'
end
collection do
HTTPメソッド名 'アクション名'
end
end

追加で作ったアクションは「memberブロック」か「collectionブロック」に記述します。
この2つの違いは、
member・・・特定のデータを対象としたアクション=リクエストにidを含ませる
collection・・・全てのデータを対象としたアクション

つまり、今回は特定のデータを対象としたアクションなのにも関わらず、collection内に該当アクションを定義していたことが原因によるエラーでした🙂

resources :mypages do
member do # idありの自作アクション
get :selling
end
collection do #idなしのあ自作アクション」」
get :items_screen
get :logout
end
end

これで解決しまいした✨

0 件のコメント:

コメントを投稿