2012-08-27 5 views
0

Q & A 앱에 대한 답변을 희망하는 질문입니다. Rails를 사용하여 여전히 매우 새로운 기능입니다. 그것은 꽤 간단해야하지만 루프에서 RESTful 경로에 해당 지점을 표시하는 링크 목록을 만들려고 할 때마다 실행되는 작은 문제가 있습니다. 여기Rails Link_to with Loop - RESTful 경로

<% 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 
다음 뷰의 코드입니다

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 

: 여기

컨트롤러에 대한 코드입니다

내가하고 싶은 일은 사용자 이름을 기반으로 개별 링크를 생성 한 다음 특정 사용자의 퀴즈 페이지에 링크하는 것입니다. 내 견해로는 코드를 변경해야 할 필요가 있다고 확신합니다. 지금 내가 취하고있는 모든 것은 모든 사용자가이 사용자 4 인 사용자를 가리키는 링크입니다. (http://localhost:3000/users/4/quiz)

이 문제를 신속하게 해결해 주셔서 감사합니다.

+0

아래의 조언과 컨트롤러의 약간의 변경을 통해 알아 냈습니다. "@users = User.find (: all, : select => : name)"을 "@users = User.find (: all)"로 변경했습니다. 꺼내기 : select => : 이름. 빌라! 다시 한번 감사드립니다. – 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 %> 

는 또한 사용자가 아닌 링크를 통해 반복하는 때문에, 명확성을 위해, userlink에서 변수를 이름.

+0

도움을 주셔서 감사합니다 그러나 이것은 "nil : NilClass"에 대한 정의되지 않은 메서드'join '오류로 나타납니다. 대신 @user를 사용하면 현재 사용자 4를 가리키는 현재 사용자를 가리키는 링크 목록입니다. (http : // localhost : 3000/users/4/quiz) . 정말 도움을 주셔서 감사합니다! – D060703

+0

그것을 알아 냈습니다. "@users = User.find (: all, : select => : name)"을 "@users = User.find (: all)"로 변경했습니다. 꺼내기 : select => : 이름. 빌라! 다시 한번 감사드립니다. – 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 => : 이름. 빌라! 다시 한번 감사드립니다. – D060703