2013-05-02 6 views
0

내가보기에이 있습니다레일 -보기에서 컨트롤러로 전달하는 변수에 어떻게 액세스합니까?

<% @users.each do |user| %> 
    <% if user.teacher == current_user.teacher || current_user.role == "admin" %> 
    <tr> 
    <td><%= user.username %></td> 
    <td><%= user.email %></td> 
    <td><%= user.teacher %></td> 
    <td><%= user.role %></td> 
    <td><%= user.admin %></td> 
    <td><%= link_to 'Problems', student_problems_path(user) %></td> 
    <td><%= link_to 'Edit', edit_user_path(user) %></td> 
    <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
<% end %> 

그래서, 내가 student_problems_path에 매개 변수로 user를 전달합니다.

def student_problems 
    @problems = Problem.all 
    @user = user.email 
end 

을하지만, 레일은 다음 나에게 말씀 : 내 UsersController에서 나는이

undefined local variable or method `user' for #<UsersController:0x3d79208 

어떻게 내가보기에서 UsersController에 전달하는 user 변수에 액세스 할 수 있습니까? 감사! 여기에 편집

내 경로입니다

    root  /       problems#new 
     feedback_index POST /feedback(.:format)   feedback#create 
      new_feedback GET /feedback/new(.:format)  feedback#new 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
     user_password POST /users/password(.:format)  devise/passwords#create 
    new_user_password GET /users/password/new(.:format) devise/passwords#new 
    edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PUT /users/password(.:format)  devise/passwords#update 
edit_user_registration GET /users/edit(.:format)   devise/registrations#ed 
    user_registration PUT /users(.:format)    devise/registrations#up 
       problems GET /problems(.:format)   problems#index 
         POST /problems(.:format)   problems#create 
      new_problem GET /problems/new(.:format)  problems#new 
      edit_problem GET /problems/:id/edit(.:format) problems#edit 
       problem GET /problems/:id(.:format)  problems#show 
         PUT /problems/:id(.:format)  problems#update 
         DELETE /problems/:id(.:format)  problems#destroy 
       users GET /users(.:format)    users#index 
         POST /users(.:format)    users#create 
       new_user GET /users/new(.:format)   users#new 
      edit_user GET /users/:id/edit(.:format)  users#edit 
        user GET /users/:id(.:format)   users#show 
         PUT /users/:id(.:format)   users#update 
         DELETE /users/:id(.:format)   users#destroy 
      help_about GET /help/about(.:format)   help#about 
      problems_new GET /problems/new(.:format)  problems#new 
        data  /data(.:format)    problems#data 
     student_problems  /student_problems(.:format) users#student_problems 
+0

student_problems_path는 중첩 된 리소스 경로처럼 보입니까? 그렇지? 이 오류는 사용자 컨트롤러를 보여줍니다. 올바른 조치를 취하고 있는지 확인하십시오. 보기 변수에 인스턴스 변수를 설정하여 뷰에 액세스 할 수 있는지 확인하고 올바른 메서드를 호출하는지 확인합니다. – Doon

+0

route.rb 코드를 게시 할 수 있습니까? –

+0

추가 경로가 있습니다. – Houdini

답변

0

다음을 수행하십시오

# pass the following to your helper: 
student_problems_path(user_email: user.email) 

# now the URL will be /[email protected] 
# and in the controller do: 

def student_problems 
    @user = params[:user_email] 
    @problems = Problem.all 
end 
+0

좋아, 나는'current_user'를 줄 것이라고 걱정했다. 내가보기에 문제가있는 학생을 원한다. 이것은 당신이 의미하는대로 작동할까요? – Houdini

+0

현재 로그인 한 사용자는 원하지 않습니다 ... – Houdini

+0

ID를 전달한 후 데이터베이스에서 조회하기 때문에'current_user'가 아닙니다. –

0

당신이 얻으려면하지만, 문제의 세부 사항을 몰라 student_problems 작업의 사용자 ID는 다음 코드를 사용할 수 있습니다.

@user_id = params[:id] 

더 많은 솔루션을 원할 경우 코드로 문제 세부 사항을 지정하십시오. 감사합니다

관련 문제