Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails——名称错误'@';不允许作为实例变量名_Ruby On Rails_Ruby_Instance Variables - Fatal编程技术网

Ruby on rails RubyonRails——名称错误'@';不允许作为实例变量名

Ruby on rails RubyonRails——名称错误'@';不允许作为实例变量名,ruby-on-rails,ruby,instance-variables,Ruby On Rails,Ruby,Instance Variables,我是RubyonRails的新手,已经被这个bug困扰了很长一段时间了。我希望有人能给我一些有用的信息来修复这个bug。我觉得我忽略了一些琐碎的事情。无论如何,我在下面列出了绘制错误的代码(在视图中)以及控制器中的代码。虽然我在这里发布之前已经做了研究,但我可能不得不将实例变量放入控制器中——然而,我不确定该过程如何进行,以及如何从我的角度调用它。我将感谢任何帮助!提前感谢:) 我得到的错误是: NameError in Search#indx '@' is not allowed as an

我是RubyonRails的新手,已经被这个bug困扰了很长一段时间了。我希望有人能给我一些有用的信息来修复这个bug。我觉得我忽略了一些琐碎的事情。无论如何,我在下面列出了绘制错误的代码(在视图中)以及控制器中的代码。虽然我在这里发布之前已经做了研究,但我可能不得不将实例变量放入控制器中——然而,我不确定该过程如何进行,以及如何从我的角度调用它。我将感谢任何帮助!提前感谢:)

我得到的错误是:

NameError in Search#indx
'@' is not allowed as an instance variable name
下面是我在视图中绘制错误的代码行(
apps/views/search/index.html.erb
):


问题是
params[:model]
nil
,因此实际上您正在执行
实例变量获取(“@”)

查看Rails日志,看看您认为正在接收的参数是否实际正在接收

编辑:下面的内容与您遇到的问题没有直接关系(前两句解释了您遇到问题的原因),而是改进代码组织方式的建议

在视图中执行
instance\u variable\u get
是一种非常糟糕的代码味道。实际上,执行
instance\u variable\u get
根本就是一种代码味道。几乎可以肯定的是,有一种更好的方法来做你想做的事情。例如:

def index
  query = search_params[:q]
  @search_results = {
    containers: Container.search(query),
    cpus:       Cpu.search(query),
    disks:      Disk.search(query),
    # ...
  }

  model = search_params[:model].to_s.downcase.pluralize # <-- this is also pretty smelly
  @search = @search_results[model]
end

private
def search_params
  params.require(:q, :model)
end
def索引
查询=搜索参数[:q]
@搜索结果={
容器:Container.search(查询),
Cpu:Cpu.search(查询),
磁盘:Disk.search(查询),
# ...
}

model=search_params[:model]。to_.downcase.pluralize#问题是
params[:model]
nil
,所以您实际上是在执行
实例变量\u get(“@”)

查看Rails日志,看看您认为正在接收的参数是否实际正在接收

编辑:下面的内容与您遇到的问题没有直接关系(前两句解释了您遇到问题的原因),而是改进代码组织方式的建议

在视图中执行
instance\u variable\u get
是一种非常糟糕的代码味道。实际上,执行
instance\u variable\u get
根本就是一种代码味道。几乎可以肯定的是,有一种更好的方法来做你想做的事情。例如:

def index
  query = search_params[:q]
  @search_results = {
    containers: Container.search(query),
    cpus:       Cpu.search(query),
    disks:      Disk.search(query),
    # ...
  }

  model = search_params[:model].to_s.downcase.pluralize # <-- this is also pretty smelly
  @search = @search_results[model]
end

private
def search_params
  params.require(:q, :model)
end
def索引
查询=搜索参数[:q]
@搜索结果={
容器:Container.search(查询),
Cpu:Cpu.search(查询),
磁盘:Disk.search(查询),
# ...
}


model=search_params[:model]。to_.downcase.pluralize#我相信你不需要逃避at符号:
“@#{…}”
@August--尝试过,它没有改变任何东西。在那一点上,参数是什么?我猜
params[:model]
是零,你正在尝试获取
的值。您在哪里设置
params[:model]
?仅供参考,从
params[:model]
执行此操作有潜在危险,因为它可能允许攻击者从您的进程中提取任意数据。我相信您不必逃避at标志:
“@#{…}”
@August--尝试过了,它没有改变任何东西。此时的参数是什么?我猜
params[:model]
为零,您正在尝试获取
@
的值。您在哪里设置
params[:model]
?仅供参考,从
params[:model]
执行此操作有潜在危险,因为它可能允许攻击者从您的进程中提取任意数据。上面的代码是一个示例,旨在说明组织代码的更好方法。它不打算被复制并粘贴到您自己的代码中。您需要编写自己的代码。重申一下,您最初看到的NameError是因为
params[:model]
nil
,上面的代码无法修复这一点。你需要弄清楚为什么你的控制器没有收到你期望的参数。语法错误表明您使用的是非常旧的Ruby版本,它不支持这种类型的哈希初始化(即
{foo:1}
{foo=>1}
)。在2014年,你应该至少使用Ruby 1.9.3。我使用的是Rails 4.1.1 Ruby与Ruby On Rails不一样。Ruby是构建web框架RubyonRails时使用的编程语言,也是使用RubyonRails构建web应用程序时使用的编程语言。Ruby的最新稳定版本是2.1.5。是的,我知道。我的问题是针对Rails,而不是Ruby。我使用的是Ruby 2.1.2。谢谢你的建议,乔丹。这样就可以了。上面的代码是一个示例,旨在说明组织代码的更好方法。它不打算被复制并粘贴到您自己的代码中。您需要编写自己的代码。重申一下,您最初看到的NameError是因为
params[:model]
nil
,上面的代码无法修复这一点。你需要弄清楚为什么你的控制器没有收到你期望的参数。语法错误表明您使用的是非常旧的Ruby版本,它不支持这种类型的哈希初始化(即
{foo:1}
{foo=>1}
)。在2014年,你应该至少使用Ruby 1.9.3。我使用的是Rails 4.1.1 Ruby与Ruby On Rails不一样。Ruby是构建web框架RubyonRails时使用的编程语言,也是使用RubyonRails构建web应用程序时使用的编程语言。Ruby的最新稳定版本是2.1.5。是的,我知道。我的问题是针对Rails,而不是Ruby。我使用的是Ruby 2.1.2。谢谢你的建议,乔丹。那就行了。
def index
  query = search_params[:q]
  @search_results = {
    containers: Container.search(query),
    cpus:       Cpu.search(query),
    disks:      Disk.search(query),
    # ...
  }

  model = search_params[:model].to_s.downcase.pluralize # <-- this is also pretty smelly
  @search = @search_results[model]
end

private
def search_params
  params.require(:q, :model)
end