2013-10-22 39 views
1

我在上導軌4在紅寶石的路由故障,並接收此錯誤:爲什麼我會在Rails 4中獲得「未定義的方法」?

undefined method `routes_path' 

我的觀點是:

<h1>Load data</h1> 
    <div class="row"> 
    <div class="span6 offset3"> 
    <%= form_for @route, :html => { :multipart => true } do %> 
     <%= hidden_field_tag 'current_user', @current_user %> 
     <%= file_field_tag :file %> 
     <%= submit_tag "Import", style: 'margin-top: -10px', class: "btn btn-primary" %> 
    <% end %> 
</div> 
</div> 

我的控制器是:

def new 
    @route = current_user.build_route 
end 

def create 
    nil_flag = Route.import(params[:file], current_user) 
    if nil_flag == 1 
     flash[:success] = "Data created." 
     redirect_to route_path(current_user) 
    else 
     flash[:error] = "Error" 
     redirect_to load_data_path 
    end 
end 

我的模特是:

def self.import(file, current_user) 
    @user = current_user 
    @route = @user.build_route 
    @nil_flag = 0 

    File.open(file.path, 'r') do |f| 
    . 
    . 
    . 
    #etc 
end 

的路線是:

match '/load_data', to: 'routes#new', via: 'get' 

我的看法,控制器和模型被命名爲 「路」。

視圖或其他內容中的路由有問題嗎?

+0

這是你唯一的路線嗎?我希望類似這樣的東西:'match'/ load_data',to:'routes#create',via:'post',as:'routes'' - 我在這裏猜測你的'form_for'標籤似乎期待('routes_path')。 – struthersneil

+0

還有其他的路由,但沒有涉及'路由'控制器,實際上,這是我唯一的路由到該控制器 順便說一句,如果我把as:'路線'它顯示一個未定義的方法'load_data_path'錯誤 – nnn7867

+0

好的。我希望你有兩條路線(至少) - 一個'get'路線指向'RoutesController :: new',它返回帶有空字段的表單的頁面,以及一個'post'路徑指向'RoutesController ::創建'接收完成表格的內容。 (這可能是GET/load_data和POST/load_data,即使URL的命名有點不直觀。) – struthersneil

回答

0

你必須specify a name for your route所以Rails會創建_path幫手:

match '/load_data', to: 'routes#new', via: 'get', as: :routes 

這將創建一個routes_path助手返回/load_data

它通常更容易使用resource routing

resources :routes, path: '/load_data' 

上面一行將創建下列路線:

 
HTTP Verb Path     Action Named Helper 
GET  /load_data   index routes_path 
GET  /load_data/new  new  new_routes_path 
POST  /load_data   create routes_path 
GET  /load_data/:id  show  route_path(:id) 
GET  /load_data/:id/edit edit  edit_route_path(:id) 
PATCH/PUT /load_data/:id  update route_path(:id) 
DELETE  /load_data/:id  destroy route_path(:id) 

您可以在終端運行rake routes獲得可用路由的列表。

相關問題