2013-05-02 30 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] 

如果您想要更多解决方案,请使用代码指定问题详细信息。谢谢

相关问题