我很新的軌道,我寫了一個小應用程序,跟蹤貸款。有一個用戶模型和貸款模型,我有它的工作,以追蹤誰貸款誰是錢等。Rails:更新貸款金額與支付金額
我想寫一個新的功能,可以跟蹤付款,但我不確定我應該把它放在哪裏它。該功能將用新值更新貸款金額的數據庫值。這個功能是否屬於貸款類的一部分,它是否會成爲可以訪問貸款/用戶模型的新控制器?
我很抱歉,如果這個問題過於模糊,我可以提供更多的信息是必要的。
我很新的軌道,我寫了一個小應用程序,跟蹤貸款。有一個用戶模型和貸款模型,我有它的工作,以追蹤誰貸款誰是錢等。Rails:更新貸款金額與支付金額
我想寫一個新的功能,可以跟蹤付款,但我不確定我應該把它放在哪裏它。該功能將用新值更新貸款金額的數據庫值。這個功能是否屬於貸款類的一部分,它是否會成爲可以訪問貸款/用戶模型的新控制器?
我很抱歉,如果這個問題過於模糊,我可以提供更多的信息是必要的。
您可以在貸款模式make_payment(amount)
中創建一個方法,並從總貸款金額中減去金額。
我會建議你保持支付日誌以便稍後跟蹤它們。創建屬於Loan
模型的Payment
模型。
當您爲一筆不重要的金額進行貸款時,您通常會遇到一個付款計劃,該計劃將按分期支付。
每次付款都可以通過多次付款進行支付。
所以讓我們看看該機型會是什麼樣子:
class User < ActiveRecord::Base
has_many :loans
has_many :instalments, through: :loans
has_many :payments, through: :loans
end
# [int, foreign_key, index] user_id
# [float] total_amount - does not change!
class Loan < ActiveRecord::Base
belongs_to :user
has_many :instalments
has_many :payments
end
# [int, foreign_key, index] loan_id
# [float] total_due
# [float] payed
# [datetime] due_date
class Instalment < ActiveRecord::Base
belongs_to :loan
has_one :user, through: :loan
has_many :payments
end
# [int, foreign_key, index] instalment_id
# [float] amount
class Payment < ActiveRecord::Base
belongs_to :instalment
has_one :loan, through: :instalment
has_one :user, through: :loan
end
這似乎過於複雜,但實際上它只是足有某種形式的財務責任。我們可以跟蹤用戶每月應支付多少費用以及哪些付款與特定分期付款掛鉤。如果你真的想要真正使用這個應用程序,你很可能會遇到更多的法律責任要求(除非你是針對瑞士市場)。
讓我們討論一下該應用程序此處流向:
注意,在這個領域模型中,我們沒有創造更新後的貸款金額 - 它只是借用他們的原始量的記錄(記住,對於會計目的,你應該始終保持數據)。
相反,我們的要搞清楚我們如何剩餘的貸款求和instalments.payed
柱:
# [int, foreign_key, index] user_id
# [float] total_amount - does not change!
class Loan < ActiveRecord::Base
belongs_to :user
has_many :instalments
has_many :payments
def payed
installments.sum(:payed)
end
def amount_due
total_amount - installments.sum(:payed)
end
end
這是一種途徑,你也將需要的:
resources :users, shallow: true do
resources :loans
end
resources :loans, only: [], shallow: true do
resources :instalments
end
resources :instalments, only: [], shallow: true do
resources :payments
end
$ rake routes
Prefix Verb URI Pattern Controller#Action
user_loans GET /users/:user_id/loans(.:format) loans#index
POST /users/:user_id/loans(.:format) loans#create
new_user_loan GET /users/:user_id/loans/new(.:format) loans#new
edit_loan GET /loans/:id/edit(.:format) loans#edit
loan GET /loans/:id(.:format) loans#show
PATCH /loans/:id(.:format) loans#update
PUT /loans/:id(.:format) loans#update
DELETE /loans/:id(.:format) loans#destroy
loan_instalments GET /loans/:loan_id/instalments(.:format) instalments#index
POST /loans/:loan_id/instalments(.:format) instalments#create
new_loan_instalment GET /loans/:loan_id/instalments/new(.:format) instalments#new
edit_instalment GET /instalments/:id/edit(.:format) instalments#edit
instalment GET /instalments/:id(.:format) instalments#show
PATCH /instalments/:id(.:format) instalments#update
PUT /instalments/:id(.:format) instalments#update
DELETE /instalments/:id(.:format) instalments#destroy
instalment_payments GET /instalments/:instalment_id/payments(.:format) payments#index
POST /instalments/:instalment_id/payments(.:format) payments#create
new_instalment_payment GET /instalments/:instalment_id/payments/new(.:format) payments#new
edit_payment GET /payments/:id/edit(.:format) payments#edit
payment GET /payments/:id(.:format) payments#show
PATCH /payments/:id(.:format) payments#update
PUT /payments/:id(.:format) payments#update
DELETE /payments/:id(.:format) payments#destroy
我很欣賞這個迴應是多麼透徹,我沒有選擇它的唯一原因是因爲我的目的,我不需要這麼發達的東西。這就是說,我希望這個迴應能夠幫助其他人理解協會如何在鐵軌中工作! –
你應該至少將餘額的貸款的原始金額分開! – max
謝謝!我不確定是否需要單獨的控制器。這個解決方案非常簡單(特別是因爲這是個人使用,而不是爲了市場)。 –
爲了更新來自網絡的貸款金額,我是否需要使用補丁請求? –