我正在使用Ruby on Rails的lynda.com教程。创建和使用数组实例变量的第一个实例不起作用。起初我认为@array可能已成为我正在使用的较新的5.0版本rails中的保留字,但更改它并不会导致“nil”(未定义)错误消失。
Ruby Rails 5.0有什么问题?它拒绝定义实例变量并将它们传递给适当的模板。
这极其恶化,因为铁轨的行为并不像记录的那样(即铁路已经脱离了箱子)。
****************
demo_controller.rb
class DemoController < ApplicationController
def index
render('hello')
end
def hello
@zarray = [1,2,3,4,5] <------------ this is defined
end
def other_hello
render(:text => "Hello EVERYONE!")
end
end
******************
hello.html.erb
<h1>Demo#hello</h1>
<p>Hello World!</p>
<%= 1 + 1 %> <------ works
<% target = "world" %>
</br>
<%= "Hello #{target}" %> <----- works
</br>
<% @zarray.each do |n| %> <---- line 10. Rails claims that @zarray is
not defined
<%= n %></br>
<% end %>
ActionView :: Template :: Error(未定义的方法`每个'为nil:NilClass):
答案 0 :(得分:1)
我复制并运行了你的代码,它工作正常。我想这可能是因为控制器应该作为一个轨道惯例是多元化的,而你的控制器被称为DemoController
并且你可能在某处调用了演示 S #action?因此,从您的终端生成一个名为:
DemosController
使用生成器:
rails g controller Demos
将所有内容从旧控制器复制粘贴到新控制器。
在您的routes.rb中,您需要首先确保拥有正确的resources :demos
(模型名称),它将为您提供标准的RESTful资源(index
,new
,{ {1}}等,但由于您的“create
”方法不是RESTful API的一部分,因此您需要为此创建自定义路由:
hello
get 'hello' => 'demos#hello', :as => :hello
= HTTP方法
'get
'=您希望hello.html.erb可以访问的URL:localhost:3000 / hello
'hello
'=演示是demos#hello
,DemosController
是控制器中的操作。
'#hello
'(_ path)是您可以在任何页面上的link_to中调用的命名助手,例如:link_to hello_path。
答案 1 :(得分:-1)
我是Ruby和Rails的新手。我使用普通的STRING实例变量测试,并且从我的控制器传递到我的模板,所以问题是数组定义。显然,我使用的教程中的旧版数组定义不再适用于我正在使用的rails和ruby版本。
我在Windows上使用Ruby on Rails 5.0.1和Ruby 2.2.4p230(2015-12-16修订版53155)[i386-mingw32](rails / ruby兼容性是犹太洁食)。
@zarray = [1,2,3,4,5] <-- the array is not defined when passed to template
@zarray = Array.new << 1 << 2 << 3 << 4 << 5 <-- this works
Ruby甚至没有抱怨数组定义的格式,这有点令人沮丧。它只是没有(即,拒绝初始化数组)。
在模板中:
<% @zarray.each do |n| %>
<%= n %></br>
<% end %>
如果你在@zarray = Array.new
之后使用@zarray = {1,2,3,4,5],我应该补充一下换句话说,在Ruby发展的某个阶段,引入了EXPLICITLY分类数组?文档中并不总是很清楚。我之前使用的教程没有明确地对数组进行分类。
问题似乎出现在我正在运行的当前RAILS版本(5.0.1)中。我做了SOMETHING来破坏Ruby使用数组文字语法创建数组的能力。当我在IRB中使用文字语法运行数组定义时,我没有创建它们的问题。 Ruby很好。它是5.0.1版本的rails中的一个严重的BUG。所以我想我应该报告一下。
Welcome to Git (version 1.8.1.2-preview20130201)
$ irb
irb(main):002:0> service_mileage = [5000,15000,30000,60000,100000]
=> [5000, 15000, 30000, 60000, 100000]
irb(main):003:0> service_mileage[0]
=> 5000
irb(main):004:0> service_mileage[2]
=> 30000
irb(main):005:0>