如何在Rails的银行帐户应用程序中添加帐户模型和交易模型之间的关联?

时间:2018-11-05 04:06:50

标签: ruby-on-rails associations

我是Rails的新手,正在构建Rails的银行帐户应用程序。用户和帐户数据已经在种子中可用。用户只有一个帐户,因此这里的关联是一对一的。但是,一个帐户可以有多个交易。因此,关联是一对多的。因此,当用户单击其帐户的“交易”选项时,他将被转到交易页面以进行借记/贷记交易。但是一旦执行了交易,交易的详细信息以及account_id应该存储在交易表中。

我的帐户和交易代码如下: 示范帐户:

class Account < ApplicationRecord
  belongs_to :user
  has_many :transaction
end

帐户控制器:

class AccountsController < ApplicationController
  def index
    @accounts = Account.all
  end
end

交易模型:

class Transaction < ApplicationRecord
  belongs_to :account
end

交易控制器:

class TransactionsController < ApplicationController
  def new
    @transaction = Transaction.new
  end

 def create
   @transaction = Transaction.new(transaction_params)
 end

 private

 def transaction_params
   params.require(:transaction).permit(:amount, :commit)
 end
 end

我在交易表中添加了account_id列。有人可以帮忙建立协会吗? 预先感谢。

2 个答案:

答案 0 :(得分:0)

在“帐户”模型中更改此内容:

has_many: transaction to has_many: transactions

请遵循命名约定。

然后在TransactionsController中创建如下的 before_action

before_action :set_account_id

def set_account_id
 @account = Account.find_by(id: params[:account_id]
end

在创建交易时,使用 set_account_id 方法返回的“帐户详细信息”进行创建。

 class TransactionsController < ApplicationController
   def create
    @transaction = @account.transactions.new(transaction_params)
    @transaction.save!
   end
 end

答案 1 :(得分:0)

我认为您具有特定帐户的交易,并且正在通过帐户进行交易。

场景1

  1. 已检查特定帐户并继续进行交易。 (创建视图)
  2. 已创建嵌套的交易路线,例如。对于新操作,/accounts/:account_id/transactions/new
  3. 创建过滤器,before_filter :find_account

    @account = Account.find(params[:account_id]) if params[:account_id]
    
  4. 在TransactionsController的新操作中,

    @transaction = @account.transactions.new
    

    如果发生更改,您需要更新transaction_params

Scenorio-2

如果不创建嵌套路由,只需提供@account_list_hash,即可在视图中使用select_list选择account_id。而新动作将会

    # code to pass array for account_id select_list by method account_list_hash
    @transaction = @Transaction.new

我会在进一步澄清的情况下进行更新。