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

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

ただいまの
回答率

87.78%

rails でタスク管理のwebサイトを作っている

解決済

回答 1

投稿 編集

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

前提・実現したいこと

rails でタスク管理のサイトを作っており新規カードを作れるようにしたい

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

新規でカードを製作する時にタイトルを空で製作した特にエラーが発生しました。

エラーメッセージ
Showing /Users/yukihiro/task/app/views/card/new.html.erb where line #4 raised:
undefined method `id' for nil:NilClass

  <div class='container'>
    <%= form_with model: @card, url: { action: :create }, html: { class: 'cardnewForm' }, local: true do |f| %>
      <%= f.hidden_field :list_id, value: @list.id %>
      <% if @card.errors.any? %>
        <p class="text-danger">タイトルは1255文字以内で入力してください</p>
      <% end %>

Rails.root: /Users/yukihiro/task

Application Trace | Framework Trace | Full Trace
app/views/card/new.html.erb:4:in `block in _app_views_card_new_html_erb__3948908429696352605_70184326787920'
app/views/card/new.html.erb:3:in `_app_views_card_new_html_erb__3948908429696352605_70184326787920'
app/controllers/card_controller.rb:16:in `create'
Request
Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"mCRIn7nBpecY/DU2KOMYWZi9XsMgZ+w2uTsgym3/bEhSZy/UGMoJ1iP/mQHSirp+Jf5rPAfzJrBuxN0OsvBCWw==",
 "card"=>{"list_id"=>"7", "title"=>"", "memo"=>"lo"},
 "commit"=>"作成する",
 "list_id"=>"7"}
### 該当のソースコード
rails 
card_controller.rb
<code>

class CardController < ApplicationController
  before_action :set_card, only: %i(show edit update destroy)

  def new
    @card = Card.new
    @list = List.find_by(id: params[:list_id])
  end


  def create
    @card = Card.new(card_params)
    if @card.save
      redirect_to :root
    else
      @lists = List.where(user: current_user)
      render action: :new
    end
  end

  def show

  end

  def edit
    @lists = List.where(user: current_user)
  end

  def update
    @lists = List.where(user: current_user)
    if @card.update_attributes(card_params)
      redirect_to :root
    else
      render action: :edit
    end
  end

  def destroy
    @card.destroy
    redirect_to :root
  end

  private
    def card_params
      params.require(:card).permit(:title, :memo, :list_id)
    end

    def set_card
      @card = Card.find_by(id: params[:id])
    end
end
new.html.erb
<div class="cardnewPgae">
  <div class='container'>
    <%= form_with model: @card, url: { action: :create }, html: { class: 'cardnewForm' }, local: true do |f| %>
      <%= f.hidden_field :list_id, value: @list.id %>
      <% if @card.errors.any? %>
        <p class="text-danger">タイトルは1~255文字以内で入力してください</p>
      <% end %>
      <div class="cardnewForm_title">
        <%= f.label :title %>
        <%= f.text_field :title, autofocus: true, class: "form-control", placeholder: "カード名" %>
      </div>
      <div class="cardnewForm_memo">
        <%= f.label :memo %>
        <%= f.text_area :memo, autofocus: true, class: "form-control", placeholder: "詳細" %>
      <div class="text-center"><%= f.submit "作成する", class: "submitBtn" %></div>
      </div>
    <% end %>
  </div>
</div>

試したこと

@lists = List.where(user: current_user)の記述をnew,createアクションに入れてみましたがエラーになります

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • Mugheart

    2020/01/21 11:58 編集

    > プログラムなどは <code>を使って読みやすくしてください

    ```言語名
    コード
    ```

    と書けばできます。例えばHTMLであれば

    ```html
    <h1>Sample</h1>
    ```

    Rubyであれば

    ```rb
    sample = 'foo'
    ```

    といった具合です。

    キャンセル

  • kaiservermiliom

    2020/01/21 13:30

    言語名を書いてコードを記載する形で書くのですね。
    ありがとうございます。

    キャンセル

  • Mugheart

    2020/01/21 13:52 編集

    変わっていません。質問後、質問ページを見て変わってないことに気づいてください。
    質問フォーム左下の方に「Markdown記法を使うと回答が得られやすくなります」と書かれているはずです。
    そちらを参考にきちんと修正してください。

    キャンセル

回答 1

checkベストアンサー

+1

プログラムなどは <code>を使って読みやすくしてください。読みにくいと読んでもらえない、回答がつかない、となります
エラーメッセージは省略しないで全部出してください。他の行にも有用な情報があります。

ないので推定な回答です。
create に失敗して newに行く時に@listが未定義なので new.html でエラーが出ている のでしょう。elseの方で @list を定義してください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/01/21 14:59

    失礼いたします new.htmlのコードには@card と @list のコードが用意できていると思うんですが書き方が間違っていますか?

    キャンセル

  • 2020/01/21 15:36

    new.htmlにつかう @listの準備が、createからの renderではなされていない のです

    キャンセル

  • 2020/01/21 17:04

    教えていただいた方法で解決することができました。 ありがとうございます。

    キャンセル

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

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

関連した質問

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