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