2016-09-29 12 views
0

私はRubyの新機能で、私のページ上のものの1つは、ユーザからの入力を受け取り、ボタンのクリックでメソッドを呼び出すことです処理のために。ボタンからメソッドを呼び出してRubyのレールにパラメータを渡す

コントローラは

def index 
    //code 
end 

def create 
//code 
end 

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

のように見えるこれはこれはルート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 

あるビュー

<%= 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" %> 

ですそのメソッドのテキストフィールド?

答えて

2

そのコントローラ内のそのアクションを指すルートを設定する必要があります。その後、ボタンを変更do_some_action_path

:あなたのconfig/routes.rbをファイルに

あなたがに「project_path」からのURLにそのポインティングを変更したいあなたのform_tagに続いて

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

を追加する必要があります <%= button_to 'Call Action', method: :post %> 明示的に指定したいメソッドは、HTTPリクエスト(get、put、postなど)であり、コントローラ内のアクションではありません。追記として

は、あなたのアクション名は

あなたは(あなたがそれを行う場合は、それに応じてルートを変更することを確認してください)アクション名 do_some_actionをしなければならないルビーのベストプラクティスに従うことをしたい場合はアンダースコアで区切られた代わりに、キャメル記法が、すべきではありません
+1

命名規則に関する良い点がありますが、非常に魅力的な理由がない限り、任意のエンドポイントを作成することも悪い考えです。 RESTアクション(例: 'create'や' update')にうまくマッピングされていない場合は、何か新しいことを発明しますが、それを実現する方法を考えることができれば、それを一般的に保つことが最善です。 – tadman

関連する問題