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

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

ただいまの
回答率

89.12%

idが見つからないというエラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 105

anguraaaa

score 21

前提・実現したいこと

railsでwebアプリケーションを作成しています。
データベースに保存されているcard_listのidを取得したいです。

ご教授のほどよろしくお願いいたします。

発生している問題・エラーメッセージ

Couldn't find CardList without an ID

該当のソースコード

point_lists_controller.rb

class PointListsController < ApplicationController
  def new
    @point_list = PointList.new
  end

  def create    
    @point_list = PointList.new(point_list_params)

    if @point_list.save
      @card_list = CardList.find(params[:id])
      redirect_to card_list_url(@card_list), notice: "特典を追加しました"
    else
      render "new"
    end
  end

  private
    def point_list_params
      params.require(:point_list).permit(:content).merge(card_list_id: params[:card_list_id])
    end
end


createアクションの@card_list = CardList.find(params[:id])の部分でエラーが発生しています。

試したこと

if @point_list.saveの直後にbinding.pryを使い、中身を調べるとcard_list_idが入っていました。

point_list_controller.rbの
findメソッドをwhereメソッドに変更するとidは見つかりました。
しかし、データの値(name,imageなど)が取り出せません。

補足情報(FW/ツールのバージョンなど)

views/point_lists/new.html.haml

=render "layouts/header"
.point-list-content
  %h2 
    追加する特典情報を入力してください
  =form_with model: @point_list, url: card_list_point_lists_url, method: :post, class: "admin-point-form", local: true do |f|
    .admin-point-form__point
      = f.text_field :content, class: "admin-point-form__point-input" 
    .admin-point-form__submit
      = f.submit "特典を追加する", class: 'btn btn-primary'
rails routesの結果です

                   Prefix Verb   URI Pattern                                                                              Controller#Action
                     root GET    /                                                                                        introduction#home
                    users GET    /users(.:format)                                                                         users#index
                          POST   /users(.:format)                                                                         users#create
                 new_user GET    /users/new(.:format)                                                                     users#new
                edit_user GET    /users/:id/edit(.:format)                                                                users#edit
                     user GET    /users/:id(.:format)                                                                     users#show
                          PATCH  /users/:id(.:format)                                                                     users#update
                          PUT    /users/:id(.:format)                                                                     users#update
                          DELETE /users/:id(.:format)                                                                     users#destroy
              users_login GET    /users/login(.:format)                                                                   users/sessions#new
                          POST   /users/login(.:format)                                                                   users/sessions#create
             users_logout DELETE /users/logout(.:format)                                                                  users/sessions#destroy
                    cards GET    /cards(.:format)                                                                         cards#index
                          POST   /cards(.:format)                                                                         cards#create
                 new_card GET    /cards/new(.:format)                                                                     cards#new
             admins_login GET    /admins/login(.:format)                                                                  admins/sessions#new
                          POST   /admins/login(.:format)                                                                  admins/sessions#create
            admins_logout DELETE /admins/logout(.:format)                                                                 admins/sessions#destroy
                   admins POST   /admins(.:format)                                                                        admins#create
                new_admin GET    /admins/new(.:format)                                                                    admins#new
    card_list_point_lists POST   /card_lists/:card_list_id/point_lists(.:format)                                          point_lists#create
 new_card_list_point_list GET    /card_lists/:card_list_id/point_lists/new(.:format)                                      point_lists#new
   card_list_coupon_lists POST   /card_lists/:card_list_id/coupon_lists(.:format)                                         coupon_lists#create
new_card_list_coupon_list GET    /card_lists/:card_list_id/coupon_lists/new(.:format)                                     coupon_lists#new
               card_lists POST   /card_lists(.:format)                                                                    card_lists#create
            new_card_list GET    /card_lists/new(.:format)                                                                card_lists#new
                card_list GET    /card_lists/:id(.:format)                                                                card_lists#show
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create
card_lists_controller.rb

class CardListsController < ApplicationController
  def new
    @card_list = CardList.new
  end

  def create
    @card_list = current_admin.card_lists.new(card_list_params)

    if @card_list.save
      redirect_to @card_list, notice: "カード登録が完了しました"
    else
      render "new"
    end
  end

  def show
    @card_list = CardList.find(params[:id])
    @point_lists = PointList.find(params[:id])
    @coupon_lists = CouponList.find(params[:id])
  end


  private
    def card_list_params
      params.require(:card_list).permit(
        :name, 
        :address,
        :opening_hours,
        :closing_hours,
        :phone_num,
        :url,
        :image)
    end  
end


イメージ説明
イメージ説明
データベースには保存されています

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

create/point_listsPOSTするような形で来ますので、params[:id]与えられません(通常、新規作成するレコードのIDは事前にわかりませんので、与えることもありません)。

作成した@point_listからcard_list_idを得ればいいのであれば、そのとおりにredirect_to card_list_url(@point_list.card_list_id)と書いてください。IDさえわかればいいので、CardList.findは無駄です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/22 10:01

    ご回答いただきありがとうございます!
    大変、勉強になりました!

    キャンセル

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

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

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