0

我有問題得到一個按鈕指向我的控制器中的正確行爲。我的表演視圖有以下按鈕:按鈕指向錯誤的行動在控制器

<%= button_to "Submit for Approval", {action: "submit", :id => @ecn.id} %> 
<%= button_to "Close ECN", {action: "close", :id => @ecn.id}, :onclick => "return confirm('Once an ECN is closed it can no longer be edited, are you sure you want to close this ECN?')" %> 

我的控制器有以下兩個動作:

def submit 

    @ecn = Ecn.find(params[:id]) 
    @email_list = EmailList.all 

    respond_to do |format| 
     EcnNotifier.submit_engineering(@ecn).deliver if @ecn.distribute_engineering? 
     EcnNotifier.submit_purchasing(@ecn).deliver if @ecn.distribute_purchasing? 
     EcnNotifier.submit_manufacturing(@ecn).deliver if @ecn.distribute_manufacturing? 
     EcnNotifier.submit_qantel(@ecn).deliver if @ecn.distribute_qantel? 
     EcnNotifier.submit_planning(@ecn).deliver if @ecn.distribute_planning? 
     format.html { redirect_to ecns_url, alert: "Ecn has been submitted for approval." } 
     format.json { render json: @ecns } 
    end 
    end 

    def close 
    @ecn = Ecn.find(params[:id]) 
    @ecn = @ecn.close_status 

    respond_to do |format| 
     EcnNotifier.close_engineering(@ecn).deliver if @ecn.distribute_engineering? 
     format.html { redirect_to ecns_url, alert: "Ecn has been closed. A confirmation email has been sent to the appropriate personnel." } 
     format.json { render json: @ecns } 
    end 
    end 

當我點擊「提交審批」按鈕,提交動作運行正常。 當我單擊「關閉ECN」按鈕時,警報按預期出現,但隨後處理提交操作而不是關閉操作。我的開發日誌顯示以下,當我點擊「關閉ECN」按鈕:

Started POST "/ecns/index?id=34" for 127.0.0.1 at 2013-11-03 11:53:02 -0700 
    Processing by EcnsController#submit as HTML 
    ... 

所以我可以看到它正在調用不正確的動作。我不知道什麼會導致這個,我不知道太多關於路由選擇,但這裏是我的路線文件,以及:

Engdb::Application.routes.draw do 

    resources :email_lists 

get 'home' => 'home#index' 
get 'logout' => 'sessions#destroy' 
get 'login' => 'sessions#new' 
post 'login' => 'sessions#create' 
delete 'logout' => 'sessions#destroy' 

    get "login/index" 

    get "sessions/new" 

    get "sessions/create" 

    get "sessions/destroy" 

    resources :users 

    get "home/index" 

    resources :ecns 

    resources :revisions 

    resources :drawings 

    resources :home 

match 'ecns/index' => 'ecns#submit' 
match 'ecns/index' => 'ecns#close' 

我加了兩個「匹配」的線路時,我創建了兩個動作。有任何想法嗎?

回答

1

的問題是,你的路由對於ecns#submitecns#close具有相同的路徑和HTTP動詞。

軌道處理路線的方式是,它將從您的routes.rb中的頂部到底部,並在找到匹配請求的第一條路徑時停止。因此,對ecns/index的請求將始終發送至ecns#submit。如果路徑相同,那麼路由器將如何知道將其發送給哪個操作?

嘗試指定一個不同的路徑爲ecns#close,或指定每個動作不同的HTTP動詞,如post#submitdelete爲。

0

嘗試使用在關閉行動路線的路徑,你正在使用基於路由權HTTP動詞確保(POST與PUT最有可能):

<%= button_to "Close ECN", {:url => <close_path>, :method => <:put/:post>, :id => @ecn.id}, :onclick => "return confirm('Once an ECN is closed it can no longer be edited, are you sure you want to close this ECN?')" %>