Как добавить связь между моделью счета и моделью транзакции в приложении банковского счета в рельсах? - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в рельсах, и я строю приложение банковского счета в рельсах. Данные пользователя и учетной записи уже доступны в семенах. У пользователя есть только одна учетная запись, поэтому связь здесь однозначная. Однако одна учетная запись может иметь несколько транзакций. Так что ассоциация один-ко-многим. Поэтому, когда пользователь нажимает на опцию «транзакция» для своей учетной записи, он направляется на страницу транзакции для транзакции дебет / кредит. Но как только транзакция выполнена, детали транзакции вместе с 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 голосов
/ 05 ноября 2018

Я думаю, у вас есть транзакции и для определенного аккаунта, и вы проводите транзакцию через аккаунт.

Сценарий-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
    

    Вам необходимо обновить транзакцию_параметры в случае изменений

Scenorio-2 :

Если вы не создаете вложенную маршрутизацию, просто предоставьте @account_list_hash, где вы выберете account_id, используя select_list в представлении. И новое действие будет

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

Буду обновлять в случае дальнейшего уточнения.

0 голосов
/ 05 ноября 2018

В модели учетной записи измените это:

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
...