2014-11-20 103 views
0

我試圖插入一個對象到數組中,而不是插入到數組中,而是在屏幕上打印內存地址。將對象添加到數組?

我有下面的代碼在我的控制器:

@article = Article.new("test","test1") 
@articles << @article  #this line causes the prints 

而且我認爲有這樣的代碼:

<%= 
    @articles.each do |a| 
    a.titulo + "/" + a.texto 
    end 
%> 

回答

3

你的問題是你如何渲染@articles

<%= @articles.each do |a| a.titulo + "/" + a.texto end %> 

each返回值是陣列本身。你想渲染數組中的每個元素,所以你應該這樣做:

<% @articles.each do |a| %> 
    <%= a.titulo + "/" + a.texto %> 
<% end %> 
+0

問題解決。謝謝! – Afaria 2014-11-20 22:17:09

1

這可能是預期的行爲。如果@articles確實是一個數組,這應該工作。只需在追加後檢查數組並確保新添加的元素在那裏。如果您是從控制檯執行此操作,則您看到的打印可能是控制檯行爲,而不是<<行爲。

由於下面的評論,我改變了我的答案以反映實際問題。您正嘗試將枚舉器呈現給視圖,而不是文章。您認爲應該是這樣的:

<% @articles.each |a| %> 
    <%= a.titulo + "/" + a.texto %> 
<% end %> 
+0

謝謝你的回答。我在網上運行它,它打印網頁中的內存地址。 – Afaria 2014-11-20 18:14:29

+0

你究竟如何將它打印到頁面上? – Brennan 2014-11-20 18:16:00

+0

我這樣做是爲了顯示結果<%= @ articles.each do | a | a.titulo +「/」 + a.texto 結束 %> – Afaria 2014-11-20 18:31:21

0

你可能會迫使@articles是這樣一個數組:

@articles ||= [] 

添加您@article像你已經做

+1

'@articles || = []'這樣做絕對不會混亂。 – tadman 2014-11-20 18:28:32

+0

好的電話。編輯答案。 – 2014-11-20 18:30:38

1

創建@articles作爲Array,然後加入<<

例如

class MyController < ... 
    def your_method 
    @articles ||= [] 
    @article = Article.new("test","test1") 
    @articles << @article 
    end 

    ... 
end 

(和/或在before_過濾器和/或...)

+0

在控制器中有一個'initialize'不是很習慣,我不推薦它。相反,我推薦一個私有方法:'def articles; @articles || = [];結束;' – Brennan 2014-11-20 18:19:21

+1

是的,控制器中的'initialize'會導致問題。不要這樣做。而是使用'before_filter'。 – tadman 2014-11-20 18:28:08

+0

好點(S);編輯答案。 – 2014-11-20 18:34:50