我尝试创建一个非常简单的Rails助手来生成一个fancybox图像预览。它应该产生以下HTML:
<a href="path-to-image" class="fancybox">
<img src="path-to-image-thumb" ... />
</a>
但是,要输出包含许多图像的可点击图库,我需要将rel
属性设置为所有链接的相同值:
<a href="path-to-image" class="fancybox" rel="my-gallery">
<img src="path-to-image-thumb" ... />
</a>
<a href="path-to-image2" class="fancybox" rel="my-gallery">
<img src="path-to-image2-thumb" ... />
</a>
我喜欢这样做:
# Single image
<%= image_preview(image) %>
# Image gallery
<%= image_gallery('my-gallery') do |g| %>
<%= g.image_preview(image) %>
<%= g.image_preview(image2) %>
<% end %>
所以我想在一个块中使用相同的image_preview
方法,而不是一个,但我正在努力实现。
我目前的实施(不起作用)如下所示:
def image_preview(image, options = {})
link_to image.url, class: 'fancybox' do # How do I decide whether I have to put the rel attribute?
image_tag image.url(:thumb), options
end
end
def image_gallery(name, &block)
yield self # Somehow I have to use the provided name as rel attribute in image_preview...
end
我也试过with_options
,但我并没有真正为它工作(并且真的不知道如何在这种情况下使用它)。
答案 0 :(得分:0)
我的实现如下:
module ImageGalleryHelper
def image_gallery(name = nil, &block)
name ||= 'gallery_' + SecureRandom.hex(6)
content_tag :div, class: name do
with_options gallery_name: name do |gallery|
yield gallery
end
end
end
def fancy_image(image, options = {})
content_tag :a, href: image.url, class: 'fancybox', rel: options.delete(:gallery_name) do
image_tag image.url(:thumb), options
end
end
end
这正是我想要的。也许有一些增强可能吗?