2013-10-23 198 views
1

美好的一天,我在與路線在Ruby on Rails的故障4航線Ruby on 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 %> 

控制器:

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'

視圖,控制器和模型被命名爲「路」

是與視圖或別的什麼路線的問題嗎?謝謝

回答

1

馬特(以前的答案作者)幾乎回答了這個問題,只是要注意,你也可以在as選項添加到你的路線,給它一個名字:

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

這將爲你定義routes_path

+0

這不是一個理想的解決方案,它是一個懶惰的解決方案。沒有冒犯,但這只是複雜的問題,特別是因爲該方法仍然是'get'! – Matt

+0

的確,我完全同意這一點 –

3

就像第一印象一樣,沒有詳細研究它 - 您可能在使用路線作爲班級名稱時遇到問題,它已經是ActionDispatch下的班級名稱。

不過,我認爲你的問題實際上是你的路線:

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

這是不是一個資源路線,也不會產生什麼樣的功能,使您可以使用表格標記語法<%= form_for @route...

要麼定義路由作爲一種資源:

resources :routes 

或者在您的形式定義網址:

<%= form_for @route, :url => some_url, :html => { :multipart => true } do %> 
+0

這意味着我們不能使用某些動作的路由,這會通過給定的動作調用核心類? –

+0

對路徑有很多控制,您可以在路徑文件本身中看到示例。你可以爲'Route'集合定義特定的路由,或者你可以定義成員方法的路由,問題是你的項目中有一個名爲'Route'的ActiveRecord資源,如果你做的事情是軌道,你將會有更容易的時間方式,使用適當的路由。閱讀http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default以幫助解釋我在說什麼。 – Matt

+0

@fahadIdrees見上面我的評論,以及弗拉德的答案。 – Matt