🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

Q&A

解決済

2回答

1938閲覧

住所情報に関する情報を購入の都度入力させること

0W5E8fPq1EOm4yE

総合スコア13

Ruby on Rails

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

0グッド

1クリップ

投稿2020/12/28 04:45

編集2020/12/28 09:45

現在、フリマアプリの購入機能の実装を行っておりますが,現状では見本の通りに正しく情報が入力されていないと購入ページに戻り、再度書き直しさせるといったことができない状況です。どうしたら見本通りにできますでしょうか?

目標
イメージ説明

現状
イメージ説明

class AddressesController < ApplicationController before_action :authenticate_user!, def index @purchase_address = PurchaseAddress.new @item = Item.find(params[:item_id]) if current_user == @item.user || @item.purchase.present? redirect_to root_path end end def create @item = Item.find(params[:item_id]) @purchase_address = PurchaseAddress.new(address_params) if @purchase_address.valid? @purchase_address.save pay_item redirect_to root_path else render action: :index end end private def address_params params.require(:purchase_address).permit(:post_number, :prefecture_id, :municipality, :addresses, :build_name ,:phone_number).merge(user_id: current_user.id,item_id: params[:item_id],token: params[:token]) end def pay_item Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( amount: @item.price, card: address_params[:token], currency:'jpy' ) end end
class PurchaseAddress include ActiveModel::Model attr_accessor :post_number,:prefecture_id, :addresses, :municipality, :prefecture_id, :phone_number, :build_name, :user_id, :item_id ,:purchase_id ,:token with_options presence: true do validates :post_number, format: { with: /\A\d{3}[-]\d{4}\z/, message: 'Input correctly' } validates :municipality validates :prefecture_id, numericality: { other_than: 1, message: 'Select' } validates :addresses validates :phone_number, format: { with: /\A\d{11}\z/, message: 'Input only number' } validates :token end def save @purchase_address = Purchase.create(user_id: user_id,item_id: item_id) Address.create(post_number: post_number, municipality: municipality, prefecture_id: prefecture_id, addresses: addresses, build_name: build_name, phone_number: phone_number, purchase_id: @purchase_address.id ) end end
<%= render "shared/second-header"%> <div class='transaction-contents'> <div class='transaction-main'> <h1 class='transaction-title-text'> 購入内容の確認 </h1> <%# 購入内容の表示 %> <div class='buy-item-info'> <%= image_tag @item.image, class: 'buy-item-img' %> <div class='buy-item-right-content'> <h2 class='buy-item-text'> <%= @item.name %> </h2> <div class='buy-item-price'> <p class='item-price-text'>¥<%= @item.price %></p> <p class='item-price-sub-text'><%= @item.burden.name %></p> </div> </div> </div> <%# /購入内容の表示 %> <%# 支払額の表示 %> <div class='item-payment'> <h1 class='item-payment-title'> 支払金額 </h1> <p class='item-payment-price'> ¥<%= @item.price %> </p> </div> <%# /支払額の表示 %> <%= form_with id: 'charge-form', class: 'transaction-form-wrap',url:item_addresses_path, model: @purchase_address,local: true do |f| %> <%= render 'shared/error_messages', model: f.object %> <%# カード情報の入力 %> <div class='credit-card-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 :number, class:"input-default", id:"card-number", placeholder:"カード番号(半角英数字)", maxlength:"16" %> <div class='available-card'> <%= image_tag 'card-visa.gif', class: 'card-logo'%> <%= image_tag 'card-mastercard.gif', class: 'card-logo'%> <%= image_tag 'card-jcb.gif', class: 'card-logo'%> <%= image_tag 'card-amex.gif', class: 'card-logo'%> </div> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">有効期限</label> <span class="indispensable">必須</span> </div> <div class='input-expiration-date-wrap'> <%= f.text_area :exp_month, class:"input-expiration-date", id:"card-exp-month", placeholder:"例)3" %> <p>月</p> <%= f.text_area :exp_year, class:"input-expiration-date", id:"card-exp-year", placeholder:"例)23" %> <p>年</p> </div> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">セキュリティコード</label> <span class="indispensable">必須</span> </div> <%= f.text_field :cvc,class:"input-default", id:"card-cvc", placeholder:"カード背面4桁もしくは3桁の番号", maxlength:"4" %> </div> </div> <%# /カード情報の入力 %> <%# 配送先の入力 %> <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 :post_number, 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(:prefecture_id, Prefecture.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 :addresses, 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 :build_name, 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" %> </div> <% end %> </div> </div> <%= render "shared/second-footer"%>

試したこと
コントローラーの設定render action: :indexからredirect_to item_addresses_pathに変更したがエラーメッセージが表示されなかった。

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

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

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

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

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

m.ts10806

2020/12/28 04:47

teratailの投稿にも画像添付機能はあるので、外部サービスはなるべく使用されないほうが良いかと思います(何かでそのサービスが利用できないときに参照不可となるため)
0W5E8fPq1EOm4yE

2020/12/28 04:49

ありがとうございます、承知しました
no1knows

2020/12/28 06:56

しょうち【承知】《名・ス他》 1.旨を承って知ること。  「その話なら―しています」 2.(願い・要求を)聞いて引き受けること。  「今度やったら―しない(=許さない)」
guest

回答2

0

自己解決

<%= form_with id: 'charge-form', class: 'transaction-form-wrap',url:item_addresses_path, model: @purchase_address,local: true do |f| %>
のモデルを消したらできました。

投稿2020/12/30 00:26

0W5E8fPq1EOm4yE

総合スコア13

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

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

0

どうしたら見本通りにできますでしょうか?

下記の2つのどちらかで期待通りの実装ができるかと思います。

・リダイレクト時に、エラーメッセージを渡す方法

Ruby

1redirect_to item_addresses_path, flash: {error: 'メッセージ'}

・render時にJavaScriptで入力内容を消す方法
(個人的にはこっちのほうが実装など簡単な気がする。)

投稿2020/12/28 11:52

no1knows

総合スコア3365

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

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

0W5E8fPq1EOm4yE

2020/12/30 00:26

<%= form_with id: 'charge-form', class: 'transaction-form-wrap',url:item_addresses_path, model: @purchase_address,local: true do |f| %> のモデルを消したらできました。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問