2015-07-21 96 views
0

我很新的軌道,我寫了一個小應用程序,跟蹤貸款。有一個用戶模型和貸款模型,我有它的工作,以追蹤誰貸款誰是錢等。Rails:更新貸款金額與支付金額

我想寫一個新的功能,可以跟蹤付款,但我不確定我應該把它放在哪裏它。該功能將用新值更新貸款金額的數據庫值。這個功能是否屬於貸款類的一部分,它是否會成爲可以訪問貸款/用戶模型的新控制器?

我很抱歉,如果這個問題過於模糊,我可以提供更多的信息是必要的。

回答

1

您可以在貸款模式make_payment(amount)中創建一個方法,並從總貸款金額中減去金額。

我會建議你保持支付日誌以便稍後跟蹤它們。創建屬於Loan模型的Payment模型。

+0

你應該至少將餘額的貸款的原始金額分開! – max

+0

謝謝!我不確定是否需要單獨的控制器。這個解決方案非常簡單(特別是因爲這是個人使用,而不是爲了市場)。 –

+0

爲了更新來自網絡的貸款金額,我是否需要使用補丁請求? –

1

當您爲一筆不重要的金額進行貸款時,您通常會遇到一個付款計劃,該計劃將按分期支付。

每次付款都可以通過多次付款進行支付。

所以讓我們看看該機型會是什麼樣子:

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 
+1

我很欣賞這個迴應是多麼透徹,我沒有選擇它的唯一原因是因爲我的目的,我不需要這麼發達的東西。這就是說,我希望這個迴應能夠幫助其他人理解協會如何在鐵軌中工作! –