前提・実現したいこと
投稿した住所を編集する機能を実装したいです。
現状、編集は可能なのですが空白でも編集が成立してしまいます。
空白で編集した際は、編集前の状態のままにする方法のご助言をよろしくお願い致します。
該当のソースコード
ruby
1models/map.rb 2 3class Map < ApplicationRecord 4 belongs_to :post 5 6 validates :address, presence: true 7end
ruby
1posts/edit.html.erb 2 3<div class="d-flex flex-column align-items-center mt-3 w-100"> 4 <div class="col-xl-7 col-lg-8 col-md-10 col-sm-11 post-card"> 5 <div class="card"> 6 <div class="post-body"> 7 <%= form_with model: @post, class: "upload-images p-0 border-0" do |f| %> 8 <div class="form-group"> 9 <label>住所</label> 10 <div> 11 <%= f.fields_for :map, @post.build_map do |m| %> 12 <%= m.text_field :address, class: "form-control", placeholder: "住所", name: "post[map_attributes][address]", id: "hidden_address" %> 13 <% end %> 14 </div> 15 <%= f.submit "編集する", class: "btn btn-primary" %> 16 <% end %> 17 </div> 18 </div> 19 </div> 20 </div> 21 </div>
ruby
1post_controller.rb 2 3 def edit 4 @post = Post.find_by(id: params[:id]) 5 end 6 7 def update 8 @post = Post.find(params[:id]) 9 if @post.update(post_params) 10 flash[:notice] = "投稿が保存されました" 11 redirect_to root_path 12 else 13 flash[:alert] = "投稿に失敗しました" 14 redirect_to edit_post_path(@post) 15 end 16 end
試したこと
https://teratail.com/questions/287522
ruby
1 def update 2 @post = Post.find(params[:id]) 3 if @post.map&.address.valid? 4 @post.update(post_params) 5 flash[:notice] = "投稿が保存されました" 6 redirect_to root_path 7 else 8 flash[:alert] = "投稿に失敗しました" 9 redirect_to edit_post_path(@post) 10 end 11 end
ruby
1 if @post.map&.address.present?
ruby
1 def update 2 @post = Post.find(params[:id]) 3 @post.update(post_params) 4 if @post.map&.address.valid? 5 flash[:notice] = "投稿が保存されました" 6 redirect_to root_path 7 else 8 flash[:alert] = "投稿に失敗しました" 9 redirect_to edit_post_path(@post) 10 end 11 end
上記を記事を参考に何度か試してみたのですが、アラートの"投稿に失敗しました"は表示されるもののアップデートが実行されてしまいます。アップデート前の状態のまま編集ページに戻るにはどうしたらいいでしょうか?
補足情報(FW/ツールのバージョンなど)
Rails 6.1.4.1
Mac OS
docker
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/05 02:07
2021/11/08 10:42