2012-01-15 65 views
0

我對rails比較新,使用rails 3.我試圖創建一個在線詞彙表,這樣如果用戶在菜單上單擊'A',他們將顯示來自數據庫都以'A'開頭。根據點擊的鏈接顯示模型數據

我知道你可以使用不同的頁面來做到這一點,你可以有一個'letter_A.html.erb'文件和'letter_B.html.erb'文件等,但我想知道是否可以在同樣的文件,因爲我想避免一遍又一遍地重複相同的代碼?

我想要的是,如果用戶點擊鏈接'D',他們可能會被帶到另一個頁面'letter.html.erb',但只能看到以'D'開頭的條目。如果他們點擊「A」,他們會再次進入同一頁面,但只能看到以「A」開頭的條目。我認爲你必須將一個變量傳遞給link_to函數,但我不知道該怎麼做。

任何幫助將不勝感激。

在此先感謝。

我創建了一個方法,我的職位,控制器內像這樣:

def showletter 
@posts = Post.where(:letter => "B") 
... 
end 

,並顯示了與例如字母B開頭的所有條目。但是我想知道的是,你可以傳遞一個變量到你的控制器中,以便「B」可以被替換爲一個介於A..Z之間的變量。從這我希望在我的視圖中使用link_to_function或類似的東西,併爲不同的鏈接調用相同的方法?我對Rails仍然很陌​​生,所以我不確定這是否可以完成 - 任何人都可以提供的幫助會很好。

+0

一種方式做,這是使用PARAMS(http://stackoverflow.com/questions/6885990/rails- PARAMS-解釋)。希望這可以幫助。 – 2012-01-15 06:02:47

+0

我以爲你可以使用參數,但我不知道該怎麼做? – user1104150 2012-01-15 08:34:11

回答

1

讓我們假設你有一個這樣的路線:現在

get '/glossary/:id', :as => :glossary 

,在您的索引頁你將有一些代碼看起來像:

<% ('a'..'z').to_a.each do |f| %-> 
    <%= link_to "#{f}", "/glossary/#{f}" %> 
<% end %> 

<% ('a'..'z').to_a.each do |f| %-> 
    <%= link_to "#{f}", glossary_path(:id => f) %> 
<% end %> 

第二個是可取的。閱讀更多here。請記住,你可以在軌控制檯的命名路由實驗,像這樣:

$ rails console --sandbox 

Loading development environment in sandbox (Rails 3.1.3) 
Any modifications you make will be rolled back on exit 
ruby-1.9.3-p0 :001 > app.glossary_path(:id => 'a') 
=> "/glossary/a" 
+0

感謝您的快速響應 - 我嘗試了第一個選項,因爲第二個選項對我不起作用 - 我收到了「未定義的方法」錯誤。我不確定這是不是我正在尋找的 - 這是否會將您發送到另一個標有'a'的頁面? – user1104150 2012-01-17 10:25:11

+0

我想要做的是點擊鏈接'a'進入術語表頁面,但你只能看到以a開頭的單詞。感謝您的幫助:) – user1104150 2012-01-17 10:27:11

+0

第二種方法強烈依賴於您的路線如何定義。查找'命名路線'以獲取更多信息。你想要的不會自動發生;這些鏈接會將您重定向到控制器,並且控制器將不得不拉出以'id'字母開頭的所有頁面。 – troutwine 2012-01-17 15:54:28