2016-04-15 98 views
0

我似乎無法弄清楚爲什麼我的紅寶石。每個 enumerable如果我的對象數組是空的,或者在底部添加一個空的div(如果在我的@posts中有一個對象)變量。空的div顯示與ruby.each枚舉在HTML.erb頁面上。

這是我的index.html.erb頁:

<div id="post_feed"> 
<%if @posts.any?%> 
    <%@posts.each do |p|%> 
    <div class="post_text_box"> 
     <%=p.body%> 
    </div> 
    <%end%> 
<%end%> 
</div> 

柱控制器:

def index 
    @posts = current_user.posts 
    @new_post = current_user.posts.new 
    end 

CSS:

#post_feed{ 
    margin-right:auto; 
    margin-left:auto; 
    width:400px; 
} 

.post_text_box{ 
    padding:10px; 
    margin:10px; 
    background-color:#FFFFFF; 
} 

軌控制檯顯示1項。

irb(main):014:0> Post.count 
    (1.3ms) SELECT COUNT(*) FROM "posts" 
=> 1 

Here is an image of the empty div.

回答

0

即使它尚未保存,Rails正在考慮@new_post是的current_user.posts一部分,所以你必須在你@posts列表的最後一個空白後。

它在數據庫查詢中沒有打開,因爲它尚未保存。

根據你需要做什麼,你可以讓@new_post只是一個空的帖子(@new_post = Post.new),並保存時分配給用戶。

或者在你的each循環中,您可以檢查,看看是否後有身體產生的div之前,如果你可以依靠支票給你你想要的結果:

<div id="post_feed"> 
    <%@posts.each do |p|%> 
    <% if p.body %> 
     <div class="post_text_box"> 
     <%=p.body%> 
     </div> 
    <%end%> 
    <%end%> 
</div> 

你不」 t需要if @posts.any?檢查,因爲它將始終評估爲true,因爲使用@new_post = current_user.posts.new創建了新帖子。

通常在ruby中,在運行each循環之前,您不需要檢查數組是否爲空,因爲each循環不會對空數組執行任何操作(或發生錯誤)。

+0

謝謝,約瑟夫。你的方式比我編制的爛攤子清潔得多。 – user1730335

0

我想通了。在我的控制器中,我正在創建一個新對象但不保存它。我的.each迭代器將它識別爲我的@posts對象數組中的對象,即使它未保存。

我通過檢查記錄是否使用new_record檢查了嗎?方法。

<div id="post_feed"> 
<%if @posts.any?%> 
    <%@posts.each do |p|%> 
    <%if ! p.new_record?%> 
    <div class="post_text_box"> 
     <%=p.body%> 
    </div> 
    <%end%> 
    <%end%> 
<%end%> 
</div>