2017-02-14 77 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>