【问题标题】:Rails - How can I access the variable I pass to the controller from the view?Rails - 如何访问从视图传递给控制器​​的变量?
【发布时间】:2013-05-02 04:39:04
【问题描述】:

我认为这是:

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

如何访问从视图传递给UsersControlleruser 变量?谢谢!

编辑

这是我的路线:

                  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

【问题讨论】:

  • student_problems_path 看起来像嵌套资源路径?是吗?但错误显示用户控制器。您确定它正在调用正确的操作吗?通过设置一个实例变量,让视图可以访问它,我会检查并验证您是否调用了正确的方法。
  • 能发一下route.rb的代码吗?
  • 我认为您应该修改与 student_problems 相关的 routes.rb 文件代码,因为您没有定义用户的 id。

标签: ruby-on-rails ruby-on-rails-3 model-view-controller


【解决方案1】:

执行以下操作:

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

# now the URL will be /student_problems?user_email=user@gmail.com
# and in the controller do:

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

【讨论】:

  • 好的,我担心会给我current_user。我想要我将查看其问题集的学生用户。这对你的意思有用吗?
  • 它不会是current_user,因为您传入了一个 ID,然后在数据库中查找它。
  • 你能看看我的路线吗?他们看起来还好吗?抱歉,我仍在学习所有这些路由的工作原理。
  • 您的代码听起来好像user 具有-a problem。它不是。 problem 仅具有 :user 属性,该属性存储执行 problem 的任何用户。
  • 好的,我已经改变了答案。
【解决方案2】:

不知道你的问题的细节,但如果你想在 student_problems 操作中获取用户的 ID,那么你可以使用以下代码:

@user_id = params[:id]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多