2

我在 Rails 中安装了 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

我怎样才能在语义上做到这一点?显然,我可以在我的代码片段中声明一个变量并在渲染之前分配它,但这似乎超级懒惰。有没有一个我可以看到的例子,它显示了片段和它是如何呈现的?

4

2 回答 2

3

render可以采取一个:collection选项,如下所示:

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

请参阅Layouts and Rendering in Rails指南中的 3.4.5 渲染集合部分,其中说:

将为集合中的每个成员插入一次部分...部分[将]可以访问集合的成员...通过以部分命名的变量

于 2013-02-13T01:30:55.427 回答
2

你可以这样做:

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

它在语义上没问题,虽然有点冗长。

于 2013-02-13T01:30:53.300 回答