2017-02-14 121 views
-1

我正在使用Ruby on Rails的lynda.com教程。创建和使用数组实例变量的第一个实例不起作用。起初我以为@array可能已经成为我使用的新版本的rails 5.0的一个保留字,但是改变它并不会导致“nil”(undefined)错误消失。Ruby轨道不创建实例变量

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 ::模板错误(未定义的方法`每个”近亲:NilClass):

+0

你能给出完整的错误信息吗? – the12

回答

1

我复制并运行您的代码,它工作得很好。我想这可能是事实,控制器应该作为轨道公约被复数化,并且你的控制器被称为DemoController,也许你已经叫做演示S#什么地方的动作?因此,产生从终端新的控制器名为:

DemosController 

与发电机:

rails g controller Demos 

而且复制粘贴一切从旧控制器到新的控制器。 而在您的routes.rb中,您需要首先确保您有正确的resources :demos(您的型号的名称),它会为您提供标准RESTful资源(index,new,create等),但作为您的'hello'方法是不是RESTful的API的一部分,你需要创建一个自定义路由:

get 'hello' => 'demos#hello', :as => :hello 

get = HTTP方法

hello” =要hello.html.erb是URL可到达:localhost:3000/hello

'demos#hello'= demos是DemosController#hello是控制器中的动作。

':as => :hello'(_path)是您可以在任何页面的link_to中调用的命名帮助程序,例如:link_to hello_path。

-1

我是Ruby和Rails的新手。我使用普通的STRING实例变量进行了测试,并且THAT从我的控制器传递到我的模板,所以问题是数组定义。显然,我使用的教程中的旧数组定义的形式不再适用于我正在使用的rails和ruby版本。

我在Windows上使用Ruby on Rails 5.0.1与Ruby 2.2.4p230(2015-12-16修订版53155)[i386-mingw32](rails/ruby​​ compatibility is kosher)。

@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甚至没有BOTHER来抱怨数组定义的格式。它只是没有意义(即拒绝初始化数组)。

在模板:

<% @zarray.each do |n| %> 
    <%= n %></br> 
<% end %> 

我要补充一点,@zarray = {1,2,3,4,5]工作,如果你@zarray = Array.new

在以后使用它换句话说,在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>