2013-05-02 29 views
0

我有這個在我看來:Rails - 如何訪問從視圖傳遞給控制器​​的變量?

<% @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 %> 

所以,我通過user作爲參數傳遞給student_problems_path。在我UsersController我:

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

但是,Rails的告訴我下面的:

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

如何獲得對user可變我傳遞給UsersController從視圖訪問?謝謝!

編輯

這裏是我的路線:

    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 2013-05-02 04:44:10

+0

你可以發佈route.rb的代碼嗎? – 2013-05-02 04:45:25

+0

確定添加路線。 – Houdini 2013-05-02 04:52:37

回答

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 2013-05-02 04:43:23

+0

我不想當前登錄的用戶,雖然... – Houdini 2013-05-02 04:44:54

+0

它不會是'current_user',因爲您傳入一個ID然後在數據庫中查找它。 – 2013-05-02 04:45:02

0

不知道你的問題的細節,但如果你想獲得在student_problems操作中的用戶ID,則可以使用以下代碼:

@user_id = params[:id] 

如果您想要更多解決方案,請使用代碼指定問題詳細信息。謝謝

相關問題