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

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

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

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

Q&A

解決済

1回答

725閲覧

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

kaiservermiliom

総合スコア6

Ruby on Rails 5

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

0グッド

0クリップ

投稿2020/01/21 02:15

編集2020/01/21 05:56

前提・実現したいこと

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">タイトルは1~255文字以内で入力してください</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/ツールのバージョンなど)

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

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

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

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

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

Mugheart

2020/01/21 02:59 編集

> プログラムなどは <code>を使って読みやすくしてください ```言語名 コード ``` と書けばできます。例えばHTMLであれば ```html <h1>Sample</h1> ``` Rubyであれば ```rb sample = 'foo' ``` といった具合です。
kaiservermiliom

2020/01/21 04:30

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

2020/01/21 04:54 編集

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

回答1

0

ベストアンサー

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

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

投稿2020/01/21 02:29

winterboum

総合スコア23284

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

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

kaiservermiliom

2020/01/21 02:53

プログラムなどは <code>を使って読みやすくしてくださいは具体的にどのように記載したらいいですか? create に失敗して newに行く時に@listが未定義なので new.html でエラーが出ている のでしょう。elseの方で @list を定義してくださいをしてみなしたがかわらなったです。 render action: :newがいらない感じですか?
winterboum

2020/01/21 05:36

<code>の件 回答を編集すると入力欄の上の枠に ,code>というのがでると思います。それをclickしてみるとわかります。 やっていることは 半角逆コーテーション3個 の行をプログラムの前と後ろにつけることなので、直接それを打ち込んでも良いでs。 @listを定義 new で次のようなことをしています。 @card = Card.new @list = List.find_by(id: params[:list_id]) 失敗した時に else render action: :new end としていますから、 new.html で必要な @card と @list を用意してあげる必要があります。 @card の方は @card = Card.new(card_params) で用意されているので、@listを用意する必要があります。 どう用意できるのか、は viewのcodeがないのでこれ以上はわかりません
kaiservermiliom

2020/01/21 05:59

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

2020/01/21 06:36

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

2020/01/21 08:04

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問