0

モデルの1つに対して更新フォームを使用してパーシャルを作成しようとしましたが、サーバーを実行してパーシャルを使用してページを参照すると、奇妙な例外が発生します。

NoMethodError in Simpadmin/transactions#index

Showing /home/ben/proj/Simplee/master/app/views/simpadmin/transactions/_transaction_actions.html.haml where line #17 raised:

undefined method `payments_transaction_path' for #<#<Class:0x00000007bf1768>:0x00000007bceb00>
Extracted source (around line #17):

14:   %span.refund-success= flash[:refund_success]
15: 
16: .refund-edit
17:   = form_for transaction do |refund_form|
18:     .refund-reason
19:       = refund_form.label(:refund_reason, "Reason for refund:")
20:       = select_tag(:refund_reason, options_for_select(possible_refund_emails), :class => 'refund-reason-select') 
Trace of template inclusion: app/views/simpadmin/transactions/_

item.html.haml, app/views/simpadmin/transactions/index.html.haml

たぶん私のルートに何か問題があります(?)パーシャル自体で何かを変更する必要がありますか?

編集:ルートは私が書いたものではありません。とにかく、ここにトランザクションのルート部分があります:

 resources :transactions, :only => [:index, :update, :show] do                                                        
155       collection do                                                                                                      
156         get :export                                                                                                      
157         post :edit_cashed_checks                                                                                         
158         put :update_cashed_checks                                                                                        
159       end                                                                                                                
160       member do                                                                                                          
161         match :update_payee, :via => [:post, :put]                                                                       
162         match :add_comment, :via => :post                                                                                
163         put :refund                                                                                                      
164       end                                                                                                                
165     end    
4

2 に答える 2

1

このフォームのルートを定義していません。ルートファイルで次のように定義する必要があります。

resources :payments do
  resources :transactions
end

詳細については、ルーティングガイドを参照してください。

于 2012-08-31T19:40:32.027 に答える
1

form_forを使用し、一部のモデルのオブジェクトを渡すため、このような場合、railsは、ヘルパールーチンを使用して呼び出されるアクションを暗黙的に想定します。Railsはxyzs_pathヘルパーを使用して、一致するルートを見つけます。ここで、Xyzは、form_forにオブジェクトを渡すモデル名です。それはあるべきであることを意味します

 resources :xyzs

また

一致する名前付きルート

 match 'some_url' => 'some_controller#action', :as => 'xyzs'  

あなたの場合、あなたは定義する必要があります

 resources :payments_transaction

また

名前付きルート

 match 'some_url' => 'some_controller#action', :as => 'payments_transaction'  
于 2012-09-02T19:01:45.193 に答える