gpt4 book ai didi

ruby-on-rails - Ruby on Rails -- NameError '@' 不允许作为实例变量名

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:25 26 4
gpt4 key购买 nike

我是 Ruby on Rails 的新手,现在已经被这个错误困扰了很长一段时间。我希望有人能给我一些有用的信息来修复这个错误。我有一种感觉,我忽略了一些微不足道的事情。无论如何,我在下面包含了绘制错误的代码(在 View 中)以及在我的 Controller 中的代码。虽然我在此处发帖之前已完成研究,但我可能必须将我的实例变量放入我的 Controller 中——但是,我不确定该过程如何进行以及如何从我的 View 中调用它。我将不胜感激任何帮助!提前致谢:)

我得到的错误:

NameError in Search#indx
'@' is not allowed as an instance variable name

这是我在 View 中绘制错误的代码行 (apps/views/search/index.html.erb):

<% @search = instance_variable_get("\@#{params[:model].to_s.downcase.pluralize}")%>

这是我 Controller 中的代码 (apps/controllers/search_controller.rb):

class SearchController < ApplicationController
def index
@containers = Container.search(params[:q])
@cpus = Cpu.search(params[:q])
@disks = Disk.search(params[:q])
@firmwares = Firmware.search(params[:q])
@hardwares = Hardware.search(params[:q])
@hosts = Host.search(params[:q])
@interfaces = Interface.search(params[:q])
@lans = Lan.search(params[:q])
@licenses = License.search(params[:q])
@rams = Memory.search(params[:q])
@networks = Network.search(params[:q])
@products = Product.search(params[:q])
@roles = Role.search(params[:q])
@sites = Site.search(params[:q])
@vmpools = Vmpool.search(params[:q])
@trackings = Tracking.search(params[:q])
end

end

最佳答案

问题是 params[:model]nil,所以您实际上是在执行 instance_variable_get("@")

查看 Rails 日志,看看您认为收到的参数是否实际收到了。

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

在 View 中执行 instance_variable_get 是一种非常糟糕的代码味道。确实,执行 instance_variable_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

然后在您的 View 中您可以访问 @search

关于ruby-on-rails - Ruby on Rails -- NameError '@' 不允许作为实例变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27364081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com