2012-08-27 34 views
0

一個問題,我希望你可以回答Q &一個應用程序。 Rails仍然很新。它應該相當簡單,但是當我試圖創建一個鏈接列表來顯示從循環返回的RESTful路由時,我遇到了一個小問題。Rails Link_to與循環 - RESTful路線

下面是用於控制器的代碼:

users_controller.rb

def list 
    @user = User.find(params[:id]) 
    @users = User.find(:all, :select => :name) 
end 

def quiz 
    @user = User.find(params[:id]) 
    @users = User.find(:all, :select => :name) 
end 

這裏的視圖的代碼:

<% if current_user.admin? %> 
    <ul> 
    <%- @users.each do |link| %> 
     <li><%= link_to link.name, quiz_user_path(@user, @quiz) %></li> 
    <% end %> 
    </ul> 
<% end %> 

這裏的路由的代碼:

resources :users do 
    get 'quiz', :on => :member 
end 

我想要做的是根據用戶的名稱生成單獨的鏈接,然後鏈接到該特定用戶的測驗頁面。我非常肯定,我認爲需要對代碼進行更改。現在,我得到的是一個鏈接,指向當前用戶,在這種情況下是用戶4.(http://localhost:3000/users/4/quiz

感謝您的任何快速提示來解決這個問題。

+0

按照下面的建議找出它,並在控制器中做一點改動。將「@users = User.find(:all,:select =>:name)」更改爲「@users = User.find(:all)」。拿出:select =>:name。瞧!再次感謝。 – D060703

回答

0

當前您正在爲每個鏈接使用相同的@user實例變量。相反,您需要使用循環中的變量集。下面的代碼應該按預期工作:

<% if current_user.admin? %> 
    <ul> 
    <%- @users.each do |user| %> 
     <li><%= link_to user.name, quiz_user_path(user) %></li> 
    <% end %> 
    </ul> 
<% end %> 

我還通過用戶不是鏈接改名從link的變量user,爲了清楚,因爲你的迭代。

+0

感謝您的幫助,但這顯示錯誤:「未定義的方法'加入爲零:NilClass」。如果我使用@user,那麼我會得到我之前所擁有的鏈接列表,這些鏈接列表中的所有鏈接均指向當前用戶(在本例中爲用戶4)。(http:// localhost:3000/users/4/quiz) 。真的很感謝幫助! – D060703

+0

想通了。將「@users = User.find(:all,:select =>:name)」更改爲「@users = User.find(:all)」。拿出:select =>:name。瞧!再次感謝。 – D060703

0

這是因爲在您當前的路線圖quiz_user_path只需要一個變量。嘗試刪除@quiz

+0

謝謝你。如果我使用@user,那麼我會得到我之前擁有的所有鏈接列表,指向當前用戶,在這種情況下,用戶4是管理員。 (http:// localhost:3000/users/4/quiz)還有什麼想法? – D060703

+0

想通了。將「@users = User.find(:all,:select =>:name)」更改爲「@users = User.find(:all)」。拿出:select =>:name。瞧!再次感謝。 – D060703