背景・やりたいこと
Railsチュートリアルのサンプルアプリを参考にして、ミニアプリを作成しています。
アプリではModelとして'user'とuserが作成する'challenge'という2つのモデルを作成しています。
サンプルアプリ同様、user作成ではform_forを使用した登録画面を使用し、登録に失敗した場合(必須項目が入力されていないなど)は,’shared/error_messages’というパーシャルをrenderして表示しています。
(こちらもサンプルアプリで同様の手法が紹介されていますが)challenge作成でもform_forを使用した登録画面を使用しますが、登録に失敗した場合はuser登録と同様に’shared/error_messages’をrenderして表示したいと思います。
困っていること
下記のように実装してみたのですが、
user作成・登録の際には意図した通り、項目に不備のあるデータを登録しようとすると作成画面にerror_messagesがflashで表示されますが、なぜかchallenge作成では不備データを登録してもerror_messagesが表示されません(登録もされませんが)
challengeのモデルの定義(validates XXX presence: trueの部分など)が不備があるかとも疑いましたが、consoleで試したところ、モデル定義は正しくなされているようです。
書き方に誤りがあると思うのでアドバイスお願いいたします。
_form.html.erb(user作成で使用)
<%= form_for(@user) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :email %> <%= f.email_field :email, class: 'form-control' %> <%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :password_confirmation %> <%= f.password_field :password_confirmation, class: 'form-control' %> <%= f.label :profile %> <%= f.text_field :profile, class: 'form-control' %> <%= f.submit yield(:button_text), class: "btn btn-primary" %> <% end %> ```. _form.html.erb(challenge作成で使用)
<%= form_for(@challenge) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :title %> <%= f.text_field :title, class: 'form-control' %> <%= f.label :story %> <%= f.text_area :story, class: 'form-control' %> <%= f.label :close_condition %> <%= f.text_field :close_condition, class: 'form-control' %> <%= f.label :due_date %> <%= f.text_field :due_date, class: 'form-control' %> <%= f.submit "Start New Challenge", class: "btn btn-primary" %> <% end %>
_error_message.html.erb
<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(object.errors.count, "error") %>.
</div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
challenge.rb (challengeのモデル)
class Challenge < ApplicationRecord
belongs_to :user
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :title, presence: true, length: { maximum: 140 }
validates :story, presence: true, length: { maximum: 2000 }
end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/31 08:10 編集
2020/01/31 08:23
2020/02/01 14:36
2020/02/01 21:18
2020/02/04 06:54