2013-04-12 30 views
0

我通過使用下面的代碼的對象列表內循環我View循環:通過查看和打印值內對象的列表與單個<%=

<% @myquiz.each do |x| %> 
    <div id="myDiv"> 
     <%= x.quiz_ID %> 
    </div> 
<% end %> 

這工作得很好,它打印該頁面上的ID。不過,我覺得,這將是清潔的,如果我沒有把的<%這麼多套和<%=小號

以下將是可取的,但它不工作:

<% @myquiz.each do |x| 

    render :text "<div>#{x.quiz_ID}</div>" 

end %> 

是有一種方法可以將put信息顯示在類似上面的循環內的屏幕上,而不需要3組<%標籤?和另一個<%標記爲我想要顯示在頁面上的每個後續值。

+0

旁註:如果你覺得你的代碼,而所有的HTML和ERB標籤更清潔,[** **斯利姆(http://slim-lang.com/)可能適合你。它是erb視圖的完美替代品。 –

+0

請參閱更新。我已經意識到在一行代碼中這樣做是沒有用的,因爲我也想圍繞它來包裝一些HTML。 – Luke

+0

你想實現什麼? –

回答

1

這裏有幾個提示,僅僅是爲了給出Ruby方法的幾個指針。

# Original 
<%= @myquiz.each do |x| 
    puts "<div>" . x.quiz_ID . "</div>" 
end %> 

<%= expression %>將導致該表達式在HTML中可見。因此你必須操縱表達式的返回值。您在那裏使用.each,而爲此目的,.map更合適,因爲它將爲每個輸入變量返回一個包含塊輸出的數組。

在塊中,最後一條語句是返回值,無需打印任何東西。

最後,像['A', 'B', 'C']這樣的數組仍然希望被某些換行符合並,所以表達式需要與.join('<br />')聯合。

這是一個混亂的地獄,但無論如何,在這裏它是:

<%= @myquiz.map {|x| "<div>#{ x.quiz_id }</div>" }.join("<br />").html_safe %> 

# or 

<%= @myquiz.map(&:quiz_id).map { |id| "<div>#{ id }</div>" }.join("<br />").html_safe %> 

在家裏不要這樣做。認真。請注意.map的工作原理,它如何收集返回值(最後一條語句)以及如何連接數組元素以形成一個字符串。

其他選項:

什麼會DHH辦? 大概是用額外的括號,或將邏輯移到其他地方(進入助手或裝飾者),並輸出某種<%= quiz_results %>

我該怎麼辦? 查看Slimslim-rails,以便將其集成並自動生成.html.slim意見。

# In a slim view 
- @quizzes.each do |quiz| 
    div = quiz.id 
+0

太好了,我現在明白了這一點。那麼你能否提供上帝會實現的方式?另外,在這個例子中,出現的尖括號被輸出爲'<',而不是實際的html :( – Luke

+1

添加了一些提示。也許通過將該字符串標記爲'.html_safe',將以您喜歡的方式輸出。 –

+0

非常感謝。您的幫助 :)。我討厭成爲編程語言的一個小老鼠。 aghh。 – Luke

1
<%= @myquiz.map(&:quiz_ID).join(', ') %> 
0

做咖喱括號阻止

<%= @myquiz.each { |x| puts x.quiz_ID } =%> 

如果塊語句有超過2 你應該寫有「做高端」,這是正確的塊。

+0

將寫入'$ stdout',這在這裏沒有幫助。 –

+0

謝謝。很高興知道我可以做到這一個字符串,但我怎麼會圍繞它包裝一些HTML?請參閱我的更新問題:) – Luke