【问题标题】:NameError: undefined local variable or method `params' for main:Object from (irb):7NameError: undefined local variable or method `params' for main:Object from (irb):7
【发布时间】:2016-08-19 19:59:56
【问题描述】:

这是subject_controller

class SubjectsController < ApplicationController
 layout false
 def index
 @subjects = Subject.order("position ASC")
 end

 def show

 @subject = Subject.find(params[:id])

 end

 def new
 end

 def edit
 end

 def delet
 end
end

这是“show.html.erb”

<%= link_to("<< Back to List", {:class => 'index'})  :class => 'back-   link)'%>
<div class ="subjects show">
<h2>Show Subject</h2>

<table sammary="Subject detail view">
 <tr>
     <th>Name</th>

     <td><%=  @subject.name  %></td>
 </tr>
 <tr>
    <th>Position</th>
    <td><%= @subject.position %> </th>
 </tr>
  <tr>
    <th>Visible</th>
    <td><%= @subject.visible ? 'true': 'flse' %> </th>
 </tr>
 <tr>
    <th>Created</th>
    <td><%= @subject.created_at %> </th>
 </tr>
 <tr>
    <th>Updated</th>
    <td><%= @subject.updated_at %> </th>
 </tr>
 </table>
</div>

所以当我在浏览器上单击某些东西时,我什么也没有得到,而当我在 Rails 控制台上这样做时

Subject.find(params[:id]) 

我收到这条消息
NameError: undefined local variable or method `params' for main:Object from (irb):7

【问题讨论】:

  • 因为 irb/console 不知道 params 是什么。

标签: ruby-on-rails ruby


【解决方案1】:

params 在您当前的控制台上下文中未定义。您正在尝试在控制台中重新创建控制器代码。在控制器中,params 会根据传入的 HTTP 请求参数自动分配。在控制台中,参数是未定义的,除非您明确分配它。在你的控制台中试试这个:

params = {id: 1}
Subject.find(params[:id]) 

如果Subject 实际上是一个 ActiveRecord 模型,它不会抛出错误。

你真正想要完成什么?

【讨论】:

    【解决方案2】:

    如果您想调试控制器,请使用prybyebug 获取特定上下文的调试控制台,例如:

    def edit
      binding.pry
      @subject = Subject.find(params[:id])
    end
    

    转到subjects/1/edit 路径,rails 服务器在断点处停止,您可以访问调试控制台。

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 2017-12-05
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多