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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

解決済

エラーハンドリング時のリダイレクトで情報を保持したままにしたい。

Solt24times
Solt24times

総合スコア32

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

1回答

0評価

0クリップ

446閲覧

投稿2021/12/23 13:09

編集2022/01/23 16:00

前提・実現したいこと

現在、フリマアプリの購入機能の部分を作成中です。
購入の際に送付先の住所を入力するのですがバリデーションによる入力エラーを起こしたときに住所の部分をそのままにリダイレクトしたいのです。

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

バリデーションおよびリダイレクトはしっかりと機能していますが情報は保持されず住所の部分は空欄になった状態に戻ってしまいいます。

エラーメッセージ

該当のソースコード

order/index.html.erb

ruby

<%= render "shared/second-header"%> <div class='transaction-contents'> <div class='transaction-main'> <h1 class='transaction-title-text'> 購入内容の確認 【長いので一部省略】 <%# 配送先の入力 %> <div class='shipping-address-form'> <h1 class='info-input-haedline'> 配送先入力 </h1> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">郵便番号</label> <span class="indispensable">必須</span> </div> <%= f.text_field :postal_code, class:"input-default", id:"postal-code", placeholder:"例)123-4567", maxlength:"8" %> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">都道府県</label> <span class="indispensable">必須</span> </div> <%= f.collection_select(:prefectures_id, Prefectures.all, :id, :name, {}, {class:"select-box", id:"prefecture"}) %> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">市区町村</label> <span class="indispensable">必須</span> </div> <%= f.text_field :municipality, class:"input-default", id:"city", placeholder:"例)横浜市緑区"%> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">番地</label> <span class="indispensable">必須</span> </div> <%= f.text_field :address, class:"input-default", id:"addresses", placeholder:"例)青山1-1-1"%> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">建物名</label> <span class="form-any">任意</span> </div> <%= f.text_field :building, class:"input-default", id:"building", placeholder:"例)柳ビル103"%> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">電話番号</label> <span class="indispensable">必須</span> </div> <%= f.text_field :phone_number, class:"input-default", id:"phone-number", placeholder:"例)09012345678",maxlength:"11"%> </div> </div> <%# /配送先の入力 %> <div class='buy-btn'> <%= f.submit "購入" ,class:"buy-red-btn", id:"button" %> </div> <% end %> </div> </div> <%= render "shared/second-footer"%>

orders_contller.rb

Ruby

class OrdersController < ApplicationController before_action :authenticate_user! def index @item = Item.find(params[:item_id]) @order = Order.new(order_params) if @item.order.present? || @item.user_id == current_user.id redirect_to root_path end end def create @item = Item.find(params[:item_id]) @order_address = OrderAddress.new(order_params) if @order_address.valid? pay_item @order_address.save redirect_to root_path else render :index end end private def order_params params.permit(:postal_code, :prefectures_id,:municipality, :address, :building, :phone_number, :item_id).merge(user_id: current_user.id, token: params[:token]) end def pay_item Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( amount: @item.price, card: order_params[:token], currency: 'jpy' ) end end

order.rb

class Order < ApplicationRecord belongs_to :user belongs_to :item has_one :address attr_accessor :token end

order_address.rb

ruby

class OrderAddress include ActiveModel::Model attr_accessor :postal_code, :prefectures_id, :municipality, :address, :building, :phone_number, :user_id, :item_id, :token with_options presence: true do validates :user_id validates :item_id validates :postal_code, format: {with: /\A[0-9]{3}-[0-9]{4}\z/ } validates :municipality validates :address validates :phone_number, format: {with: /\A[0-9]{10,11}\z/ } validates :token end validates :prefectures_id, numericality: {other_than: 0, message: "can't be blank"} def save order = Order.create(user_id: user_id, item_id: item_id) Address.create(postal_code: postal_code, prefectures_id: prefectures_id,municipality: municipality, address: address, building: building, phone_number: phone_number, order_id: order.id) end end

試したこと

renderメソッドを使用すればいいと聞いていましたので使用したのですがダメでした。
それ以外で色々と調べてみたのですが解決につながりそうな情報を得ることができませんでした。

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

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

MasaSakano

2021/12/24 15:28

「入力エラー」とは、Railsレベルで何を意味するのかわかりません。「カード情報以外の情報」もRailsレベルで何を意味するのか不明です。 具体的な情報が記載されていないと、回答を期待するのは難しいかと恐れます……。 一方、添付されたコードが長過ぎて読む気が萎えます。質問する前に、徹底的に絞って、必要部分だけを記載するのが望ましいです。端的には、回答者の手間を最小限に抑えるように努力すれば、回答がつく確率があがると思います。
MasaSakano

2021/12/28 13:37

編集されて少しわかりやすくなりました! しかし、依然、質問者の意図として、どのviewを見た時に、どのControllerメソッドが実行された結果として、「バリデーションによる入力エラー」が発生するのかがわかりません。この質問を読む人が、質問者の環境および実行状況を一切知らない、という前提で質問が書かれていないと、回答者がそれを憶測するのは難しいでしょう。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。