2012-05-02 58 views
1

我一直試圖讓它工作3天。我似乎無法理解它爲什麼不起作用。當用戶點擊視圖上的link_to標籤時,它應該在控制器中執行csv功能。 Instread我得到一個異常。在rails應用程序中爲link_to標記斷開的路由/ URL映射


以下是相關文件

控制器文件:(users_controller.rb)

def csv 

end 

(routes.rb中):

resources :users 

查看:(show.html .erb)

<%= link_to 'Click HERE to open file', @user.image.url %><br/><br/><br/> 
<%= label_tag(:q, "Parse CSV File:") %><br/> 
<%= link_to 'CSV', csv_user_path %> 
<% end %> 

當我點擊上面的「link_to'CSV'..標記。它給了我這個異常:

NameError in Users#show 
Showing /Users/AM/Documents/RailsWS/bmc_mam/app/views/users/show.html.erb where line #47 raised: 
Extracted source (around line #47): 

44:   
45: <%= label_tag(:q, "Parse CSV File:") %><br/> 
46: 
47: <%= link_to 'CSV', csv_user_path %> 
48:    
49:   
50:   

瀏覽器的URL時出現異常,如下所示:

http://localhost:3000/users/28 

它越來越清楚的功能,但URL映射/路由顯然是一團糟。我想知道如何解決它.....我在過去幾天嘗試了幾種方法,似乎沒有任何工作。 這是最接近我得到使其工作,因爲...

在此先感謝您的幫助。


通過@Gavin米勒下面貼出後的答案後:

我cahnged我的routes.rb文件,以這樣的:

get 'csv' => 'users#csv' 
resources :users 

現在即時得到此異常:

NameError in Users#show 

Showing /Users/AM/Documents/RailsWS/bmc_mam/app/views/users/show.html.erb where line #47 raised: 

undefined local variable or method `csv_user_path' for #<# <Class:0x00000104e7f6f8>:0x00000103a23c68> 

Extracted source (around line #47): 

44:   
45:    <%= label_tag(:q, "Parse CSV File:") %><br/> 
46:    
47:    <%= link_to 'CSV', csv_user_path %> 
48:    
49:   
50:   

回答

1

只聲明resources :users只會推斷7個標準REST風格的動作。如果你想csv被接受爲一個路線,你必須明確地定義它:

get 'csv' => 'controller#action' 

其中controller == usersaction == csv


重新解決編輯過的問題...你需要給用戶對象傳遞給csv_user_path功能:

<%= link_to 'CSV', csv_user_path(@user) %> 

這似乎也像你想的網址與用戶相關聯的,所以你可以聲明爲一個member到得到這樣一個網址:http://localhost:3000/users/28/csv爲結果,您可以使用此代碼:

resources :users do 
    member do 
    get 'csv' 
    end 
end 


REST風格的動作 index, new, create, show, edit, update, destroy在看到 Rails Routing Guide

+0

太棒了。那工作!!!!!!非常感謝!! 我過去2天一直瘋狂! – banditKing

+0

@banditKing完全知道這種感覺。您還可以運行'rake routes'來自動從您的路線中查看正在爲您生成的網址。最左邊的列會給你一個函數列表,你可以在結尾添加'_url'或'_path'來生成URL。 –

+0

在你的情況下,你會發現在左邊的列中有一個值'csv_user' –