2016-06-21 122 views
0

我正在研究一個小的Rails 4.2應用程序來修改2個Rails引擎中的幾個db表中的記錄。一個rails應用程序是爲此目的而創建的。沒有型號只有一個控制器user_menusform_tag的路徑不正確

class UserMenusController < ApplicationController 

    def home 

    end 

    def doper 
    #update db records 

    end 

home.html.erb是一個窗體,輸入一些params更新。

<%= form_tag(:controller => 'user_menus', :action => 'doper', :method => 'get') do %> 
    <div class="form-inputs"> 
     <%= label_tag(:db_name, "Release") %> 
     <%= select_tag(:db_name, options_for_select([['',''],['Engine Config', 'engine_config'], ['User Access', 'user_access'], ['Search Stats', 'search_stats']])) %> 

     <%= submit_tag 'Submit' %> 
     </div> 
    <% end %> 
end 

routes.rb,有定義:

get '/handler', :to => "user_menus#doper" 

    root :to => "user_menus#home" 

的問題是,我有時間難以做出正確的路徑爲form_tag。錯誤是:

No route matches {:action=>"doper", :controller=>"user_menus", :method=>"get"} 

以下<%= form_tag('/handler') do %>不工作,以及:

No route matches [POST] "/handler" 

rake routes,對於/handler的定義。我在這裏錯過了什麼?

回答

1

你必須爲你的行動路線,還不如用它

form_tag '/handler', method: :get do 

是的,使用GET請求產生的副作用是壞的。你爲什麼不用POST呢?

+0

這是一個請求'doper'的視圖模板。改成'method::post'並且錯誤是一樣的(缺少'doper'模板) – user938363

+0

那麼,你的路線必須與你在表格中使用的一致。確保他們這樣做。而且,「doper」動作必須渲染一些東西。解決這個問題。 –

+0

在routes.rb中聲明一個用於更新記錄集合(沒有數據模型)的路由的正確方法是什麼?我試過'post/handler,來:'user_menus#doper'或'patch。在doper結尾處,它會重定向。全部數據庫更新應該在'doper'內執行。 – user938363

1

當你做<%= form_tag('/handler') do %>默認情況下,動詞是post。 嘗試加入

post '/handler' => "user_menus#doper" 

到您的路線。

2

在這裏,你的表單標籤傳遞方法得到。你可以通過檢查元素來檢查你的表單方法。

默認情況下,表單標籤採用表單方法。您可以覆蓋它,在這裏您需要更改語法。

<%= form_tag({:controller => "user_menus", :action => "doper"}, {:method => "get"}) %> 
or 

<%= form_tag({:controller => "user_menus", :action => "doper"}, :method => "get") %> 
0

「爲handler_path」 添加名稱路線

得到 '/處理程序',以:「user_menus#摻雜裝置,爲:handler_path

您的form_tag:

form_tag handler_path,{method:「get」} do