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

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

詳細はこちら
Ruby on Rails

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

Q&A

解決済

1回答

1919閲覧

Formオブジェクトの書き方について

0W5E8fPq1EOm4yE

総合スコア13

Ruby on Rails

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

0グッド

0クリップ

投稿2020/12/25 09:01

クレジットカード情報(token)はpurchasesテーブル、住所はaddresesテーブルに保存したくFormオブジェクトを用いていますが画像のようにうまくいきません。どうしたらいいのでしょうか?

発生している問題・エラー

イメージ説明

該当するソースコード

class Address < ApplicationRecord belongs_to :purchase end
class Purchase < ApplicationRecord attr_accessor :token validates :token, presence: true belongs_to :user belongs_to :item has_one :address end
class PurchaseAddress < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions include ActiveModel::Model attr_accessor :post_number, :municipality, :prefecture_id, :phone_number, :token belongs_to :prefecture 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 :address validates :phone_number, format: { with: /A\d{11}z/, message: 'Input only number' } validates :token end def save user = User.create(nickname: nickname, name: name,family_name: family_name,namekana: namekana,family_namekana: family_namekana, birth: birth) item = Item.create(name: name, text: text, price: price, state_id: state_id, category_id: category_id, prefecture_id: prefecture_id, burden_id: burden_id, shippingday_id: shippingday_id, image: image) Purchase.create(user_id: current_user.id, item_id: item_id, token: token) Address.create(post_number: post_number, municipality: municipality, prefecture_id: prefecture_id, addresses: addresses, phone_number: phone_number,user_id: current_user.id) end end
class AddressesController < ApplicationController def index @purchase_address = PurchaseAddress.new end def create @purchase_address = PurchaseAddress.create(address_params) if @purchase_address.valid? pay_item @purchase_address.save return redirect_to root_path else render 'index' end end private def address_params params.permit(:post_number, :municipality, :prefecture_id, :phone_number, :token) end def pay_item Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( amount: item_params[:price], card: purchase_params[:token], currency:'jpy' ) end end

自分で試したこと

Formオブジェクトの記述、各モデルのアソシエーションの確認

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

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

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

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

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

siruku6

2020/12/26 09:34

table がないようです。 $ bundle exec rails db:migrate:status か、または、 $ rails db:migrate:status を実行すると、どんな結果が表示されるでしょうか。 purchase_addressesテーブルは作成されていることが確認できましたか? db/schema.rbファイルでの確認もありですが、上記コマンド実行結果の方があてになります。
0W5E8fPq1EOm4yE

2020/12/28 00:05

purchase_addressモデルのsaveメソッドを 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 にしたら直りました!
guest

回答1

0

自己解決

purchase_addressモデルのsaveメソッドを
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
にしたら直りました!

投稿2020/12/28 00:05

0W5E8fPq1EOm4yE

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問