2012-11-07 111 views
1

我剛開始使用Rails,並試圖構建一個銀行應用程序。我在設置帳戶之間的交易時遇到問題。在Rails中定義自定義方法

我目前腳手架的交易和帳戶。在我的交易頁面中,我可以創建交易清單,每個交易都包含有關來源賬戶,轉賬金額和目標賬戶的信息。但是,在頁面末尾,我想要一個鏈接或一個按鈕來處理頁面上的所有事務並清除頁面。因此,修改所有指定的賬戶餘額。

下面是我在做這件事的步驟。

1)在事務模型(transaction.rb模型)定義處理方法

class Transaction < ActiveRecord::Base 
    def proc (transaction) 
     # Code processes transactions 
     @account = Account.find(transaction.from_account) 
     @account.balance = @account.balance - transaction.amount 
     @account.update_attributes(params[:account]) #update the new balance 
end 
end 

2)然後創建在交易控制器呼叫的方法執行

def execute 
     @transaction = Transaction.find(params[:id]) 
    proc (@transaction) 
    @transaction.destroy 

     respond_to do |format| 
     format.html { redirect_to transactions_url } 
     format.json { head :no_content } 
    end 

3)然後定義要在交易頁面上顯示的鏈接(如下所示):

<% @transactions.each do |transaction| %> 
    <tr> 
    <td><%= transaction.from_account %></td> 
    <td><%= transaction.amount %></td> 
    <td><%= transaction.to_account %></td> 
    <td><%= link_to 'Execute', transaction, confirm: 'Are you sure?', method: :execute %></td> 
    <td><%= link_to 'Show', transaction %></td> 
    <td><%= link_to 'Edit', edit_transaction_path(transaction) %></td> 
    <td><%= link_to 'Destroy', transaction, confirm: 'Are you sure?', method: :delete %></td> 
    <td><%= transaction.id%></td> 
</tr> 
<% end %> 

4)但是,當我點擊鏈接執行我得到的路由錯誤: [POST] 「/交易/ 6」

目前我的路線(routes.rb中)的設置如下:

resources :transactions do 
     member do 
     post :execute 
     end 
    end 

    resources :accounts 

如何設置路線,以便它可以處理我的方法? 在此先感謝

回答

1

你想在這裏做的不是增加一個新的方法是什麼,但一個新的「HTTP動詞。不要這樣做。你可能會收到一個討厭的消息是這樣的:

!! Unexpected error while processing request: EXECUTE, accepted HTTP methods are OPTIONS, 
GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, 
UNLOCK, VERSION-CONTROL, REPORT, CHECKOUT, CHECKIN, UNCHECKOUT, MKWORKSPACE, UPDATE, LABEL, 
MERGE, BASELINE-CONTROL, MKACTIVITY, ORDERPATCH, ACL, SEARCH, and PATCH 

在控制檯中運行「rake routes」,並確保您有執行所登記的路線。喜歡的東西:

execute_transaction 

然後更新您的執行鏈接,並使用正確的路徑查找器代替「交易」,並設置方法:帖子代替。

link_to "Execute", execute_transaction_path(transaction), method: :post 
+0

謝謝,有道理。 – Alex

0

小差異:將方法名稱從符號更改爲字符串。

resources :transactions do 
    member do 
    post "execute" 
    end 
end 

結帳的Rails Routing Guide

+0

兩者都在我身邊工作。 –