2016-09-29 62 views
0

我是ruby的新手和我的頁面上的其中一個東西我正在嘗試的是從用戶處獲取輸入並在按鈕上單擊想要調用方法進行處理。從按鈕調用方法並將參數傳遞到Ruby軌道

控制器看起來像

def index 
    //code 
end 

def create 
//code 
end 

def doSomeAction 
//This is where I want to process 
end 

這是視圖

<%= form_tag(project_path, multipart: true, class: 'form-inline', role: 'form') do %> 

    <%= button_tag 'upload batch file', class: 'btn btn-primary' %> 
    <%= link_to 'Reports Index', reports_path %> 

<% end %> 

<%= text_field "item", "ids", "size" => 20 %> 
<%= button_to 'Call Action', method: "doActionTest" %> 

這是路線

Rails.application.routes.draw do  

    resources :browse_items, only: [:index, :show] 
    resources :reports, only: [:index, :show] 

    resources :project, only: [:index, :create, :show] 
    root to: "project#index" 
end 

如何按鈕映射到doActionTest以及如何通過價值該方法的文本字段?

回答

2

您需要設置一個指向該控制器內部動作的路由。

在你的config/routes.rb中文件中應添加

post 'doSomeAction', to: 'ControllerNameHere#doSomeAction', as: 'do_some_action' 

然後在你的form_tag要其指向從「project_path」更改URL到:do_some_action_path

然後更改按鈕你必須: <%= button_to 'Call Action', method: :post %>

他們希望明確聲明的方法是HTTP請求(如get,put,post等),而不是控制器中的動作。

一點題外話,你的動作名稱不應該駝峯格式,而是如果你想跟着紅寶石最佳做法,你應該做的動作名稱do_some_action(如果你這樣做,確保您更改相應的路由)用下劃線分隔

+1

有關命名約定的好處,但除此之外,創建任意端點也是一個壞主意,除非您有一個非常有說服力的理由。如果它沒有整齊地映射到REST動作(例如'create'或'update'),通過一切手段發明一些新的東西,但是如果你能想出一種方法來實現這一點,通常最好保持它的通用性。 – tadman

相關問題