###前提・実現したいこと
ruby(ruby on rails)でアカウントモデル同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルにアカウント同士の関係を記録するときは、
すでに元のなるアカウント情報があるので、
「出金(支払)するアカウントのid(アカウントモデルを参照する外部キー)」と
「入金(受取)するアカウントのid(アカウントモデルを参照する外部キー)」を
記録することになると思います。
ただユーザーが入力フォームで入力する値は、
「id(主キーや外部キー)」ではなくユーザー名やメールアドレスみたく
変更可能性のある「アカウント番号(文字列)」なので、
そのまま取引モデルの外部キーのカラムに記録することはできないと思います。
その場合、入力した「アカウント番号(受取をするアカウント番号)」からピッタリ該当する「アカウントモデルのid(アカウントモデルの主キー)」を探し出して、
そのidを取引モデルの
「入金(受取)するアカウントのid(アカウントモデルを参照する外部キー)」カラムに
記録したいのですが、どうしたらいいのかがわかりません。
教えて頂ければ幸いです。
よろしくお願いします。
###現状
モデル(テーブル)の内容です。
BasicIncomeAccount(アカウントモデル)
・id(デフォルトで作成されるユニークかつ不変な主キー)
・account_number(ユニークだけど変更の可能性ありのアカウント番号)
AccountTransaction(取引モデル)
・withdrawal_account_id(外部キーであり出金側の口座id)
・deposit_account_id(外部キーであり入金側の口座id)
・amount(取引額)
class BasicIncomeAccount < ApplicationRecord has_many :withdrawal_account_transaction, class_name: 'AccountTransaction', :foreign_key => 'withdrawal_account_id' has_many :deposit_account_transaction, class_name: 'AccountTransaction', :foreign_key => 'deposit_account_id'
class AccountTransaction < ApplicationRecord belongs_to :withdrawal, class_name: 'BasicIncomeAccount', :foreign_key => 'withdrawal_account_id' belongs_to :deposit, class_name: 'BasicIncomeAccount', :foreign_key => 'deposit_account_id' end
取引のコントローラです。
app/controllers/account_transactions_controller.rb
class AccountTransactionsController < ApplicationController def new @account_transaction = AccountTransaction.new end def create @account_transaction = AccountTransaction.new( withdrawal_account_id: current_user.basic_income_account, deposit_account_id: params[:deposit_account_id], amount: params[:amount] ) end private def account_transaction_params params.require(:account_transaction).permit(:withdrawal_account_id, :deposit_account_id, :amount) end end
app/views/account_transactions/new.html.erb(入力フォーム)
<%= form_for @account_transaction do |f|%> <div class="field"> <%= f.label :送金相手の口座番号 %> <%= f.text_field :deposit_account_id %> <%= f.label :送金額 %> <%= f.number_field :amount %> <%= f.submit"送金" %> </div> <% end %>
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
devise (4.3.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/17 23:53
2017/11/21 01:59 編集
2017/11/22 02:32 編集