2013-02-13 60 views
2

我有安裝Rails的HAML。我試圖通過製作片段模板來擴展它的功能。例如,我有這個一般的圖像結構:如何與HAML保持乾爽?

- @images.each do |image| 
    .image 
    %a{ :href => image.target } 
     = image_tag image.url 
    %a{ :href => edit_image_path(image) } 
     Edit 

或至少是這樣的效果。我想要做的是清理它,以便我可以這樣說:

- @images.each do |image| 
    = render 'snippet/image' image 

我該如何實現這個語義?顯然,我可以在我的代碼片段中聲明一個變量並在渲染之前分配它,但這看起來超級懶惰。有沒有一個我能看到的例子,顯示了片段以及它是如何渲染的?

回答

3

render可以採取:collection選項,像這樣:

= render :partial => "image", :collection => @images 

見第3.4.5節渲染類別在Layouts and Rendering in Rails導向,這表示:

部分將每個被插入一次成員在集合中...部分[將]有權訪問集合的成員...通過以部分命名的變量

+0

我忘記了!比我的更好的解決方案。 – 2013-02-13 01:32:04

+0

@YlanS - 謝謝! – 2013-02-13 01:34:10

2

你可以這樣做:

- @images.each do |image| 
    render :partial => 'snippet/image', :locals => { :image => image } 

它的語義好了,雖然有點冗長。