プログラミング歴1ヶ月の初心者です。
どのぐらい初心者かというと、Railsチュートリアルをわけもわからず写経してツイッターもどきを作ったことはあるものの、MVCを漠然と理解しはじめた程度の状態です。
昨日はVagrantでローカル開発環境を四苦八苦しながら作って「rails new」するのに丸一日使ってしまった、そんなレベルです。
さて、今回は初めてteratailで質問させていただきます。
昨夜、ドットインストールのRailsコースをやり終わりました。「TaskApp」というタスク管理アプリをサンプルとして進めていく動画授業です。
理解不明な部分も多々ありますが、ひととおりドットインストールを写経して、少しだけアレンジを加えてみようと思いましたが、どうしてもうまくできないので教えてください。
★ドットインストールのサンプルアプリの説明
このサンプルアプリ「TaskApp」はシンプルな仕様で、各プロジェクトの中にタスクがあり、各プロジェクトの管理画面でタスクを複数追加できる、というものです。
ドットインストールの動画では、プロジェクトを追加するcreateの際にバリデーションを適用して、「入力してください」や「4文字以上は必須です!」などのエラーメッセージが表示できるようにしています。
それと似たような感じのオリジナル機能を実装したいのですが、ここでハマっています。
タスク登録の際、空白でsubmitボタンを押したら「空白では登録できません!」という文字を表示したいと思ったのですが、どうしてもできませんでした。
アドバイスをいただけるとうれしいです。よろしくお願いします。
添付画像はshow.html.erbです。(teratailは画像は1枚しか添付できないのでしょうか?)
###前提・実現したいこと
task登録フォームに空白を入れたままsubmitボタンを押したら、”空白では登録できません!”と表示できるようにしたい
###発生している問題・エラーメッセージ
createメソッドnewとsaveを同時におこなうメソッドですからバリデーションエラー理由で保存できなかった場合、@taskにはfalseとエラーメッセージが入るので、if @task.errors.any?
の条件に当てはまり、errorsが取得できるかな、と思ったら、「undefined method `errors' for nil:NilClass」のエラーが出てしまいます。これは@taskがnilになってしまっているのだと思います。
###ソースコード
rails
1<%= form_for [@project, @project.tasks.build] do |f| %> 2 <%= f.text_field :title %> 3 <% if @task.errors.any? %> #自分で追記した行 4 <%= @task.errors.messages[:title][0] %> #自分で追記した行 5 <% end %> #自分で追記した行 6 <%= f.submit %>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/30 14:22 編集
2015/10/30 23:16 編集