質問編集履歴

5 タイトルの変更

zendendo

zendendo score 41

2017/11/18 10:28  投稿

入力フォームで入力された値を該当するid(外部キー)にして、モデルに記録する方法ってありますか
フォームで入力された値から該当するidを取得してモデルに外部キーとして記録する方法ってありますか
###前提・実現したいこと
 
ruby(ruby on rails)でアカウントモデル同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルに両者の関係を記録するときは、
この場合、取引モデルにアカウント同士の関係を記録するときは、
すでに元のなるアカウント情報があるので、
「出金(支払)するアカウントのid(アカウントモデルを参照する外部キー)」と
「入金(受取)するアカウントのid(アカウントモデルを参照する外部キー)」を
記録することになると思います。
ただユーザーが入力フォームで入力する値は、
「id(主キーや外部キー)」ではなくユーザー名やメールアドレスみたく
変更可能性のある「アカウント番号(文字列)」なので、
その場合、入力した「アカウント番号」からピッタリ該当する「アカウントモデルの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)
  • Ruby

    17953 questions

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

  • Ruby on Rails

    19721 questions

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

4 説明を詳しくする

zendendo

zendendo score 41

2017/11/18 09:14  投稿

入力フォームで入力された値を該当するid(外部キー)にして、モデルに記録する方法ってありますか
###前提・実現したいこと
ruby(ruby on rails)でアカウント同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルに記録するときは、
出金(支払)するアカウントのid(外部キー)と
入金(受取)するアカウントのid(外部キー)を記録することになると思います。
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)
  • Ruby

    17953 questions

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

  • Ruby on Rails

    19721 questions

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

3 ミス記入を訂正

zendendo

zendendo score 41

2017/11/18 08:58  投稿

入力フォームで入力された値を該当するid(外部キー)にして、モデルに記録する方法ってありますか
###前提・実現したいこと
ruby(ruby on rails)でアカウント同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルに記録するときは、
出金(支払)するアカウントの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_number],
     deposit_account_id: params[:deposit_account_id],
     amount: params[:amount]
     )
 end
 
 private
 def account_transaction_params
  params.require(:account_transaction).permit(:deposit_account_id, :amount)
  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_number %> 
 <%= 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)
  • Ruby

    17953 questions

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

  • Ruby on Rails

    19721 questions

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

2 誤字脱字

zendendo

zendendo score 41

2017/11/17 15:46  投稿

入力フォームで入力された値を該当するid(外部キー)にして、モデルに記録する方法ってありますか
###前提・実現したいこと
ruby(ruby on rails)でアカウント同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルに記録するときは、
出金(支払)するアカウントの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_number],
     amount: params[:amount]
     )
 end
 
 private
 def account_transaction_params
  params.require(:account_transaction).permit(: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_number %> 
 <%= f.label :送金額 %>
 <%= f.number_field :amount %> 
 <%= f.submit"送金" %>
</div>
<% end %>
```
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
devise (4.3.0)
  • Ruby

    17953 questions

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

  • Ruby on Rails

    19721 questions

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

1 言語の追加

zendendo

zendendo score 41

2017/11/17 15:13  投稿

入力フォームで入力された値を該当するid(外部キー)にして、モデルに記録する方法ってありますか
###前提・実現したいこと
アカウント同士の取引を、取引モデルへの記録したいとします。
ruby(ruby on rails)でアカウント同士の取引を取引モデルへの記録したいとします。
この場合、取引モデルに記録するときは、
出金(支払)するアカウントの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_number],
     amount: params[:amount]
     )
 end
 
 private
 def account_transaction_params
  params.require(:account_transaction).permit(: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_number %> 
 <%= f.label :送金額 %>
 <%= f.number_field :amount %> 
 <%= f.submit"送金" %>
</div>
<% end %>
```
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
devise (4.3.0)
  • Ruby

    17953 questions

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

  • Ruby on Rails

    19721 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る