2013-02-13 40 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 } 

它的语义好了,虽然有点冗长。