RoR 使用 HAML 将 image_path 放入数据属性中

RoR put image_path in data attribute using HAML

我开始使用 HAML,但 运行 遇到了问题。

我需要将 image_path() url 放在元素 data-attribute 中。

假设我的图像是 app/assets/images/foo/bar/image.png

我想出了如何获得image_path,例如

%h1 #{image_path ("foo/bar/image.png")}
/ will return

/assets/foo/bar/image-944cf331269515d31d4ab23897df6c217e4593a942af756d4433a4987961cc29.png

哪个好。现在我想将这个字符串放入元素的数据属性中,例如 h1.

这是我试过的:

%h1{data: {'foo' => #{image_path ("foo/bar/image.png")} }}
/ returns an error
%h1{data: {'foo' => '#{image_path ("foo/bar/image.png")}' }}
/ returns
/ <h1 data-foo="#{image_path ('foo/bar/image.png')}"></h1> 

这就是我要找的:

<h1 data-foo="/assets/foo/bar/image-944cf331269515d31d4ab23897df6c217e4593a942af756d4433a4987961cc29.png"></h1>

正确的做法是什么?

谢谢

%h1{data: {'foo' => image_path("foo/bar/image.png") }}

你快接近了,但也许你不知道 'string' 和 "string" 的区别。

在 Ruby 中,带有 'string' 的字符串不会替换任何内容。您需要使用 "string" 调用一个字符串,您可以在 #{} 中使用该字符串中的 ruby 代码

在您的控制台中测试以下内容

"#{1+1}" # outputs "2"
'#{1+1}' # outputs "#{1+1}"

现在回到你的问题:

%h1{data: {'foo' => '#{image_path ("foo/bar/image.png")}' }}
change to
%h1{data: {'foo' => "#{image_path ('foo/bar/image.png')}" }}

但你不需要那些字符串操作,你可以直接

%h1{data: {'foo' => image_path ("foo/bar/image.png") }}

或者如果你使用 ruby 2.2.1 你可以走得更直

%h1{data: {"foo": image_path ("foo/bar/image.png") }}

或者让它变得更短更易读

%h1{"data-foo": image_path ("foo/bar/image.png")}

在 Ruby 2.2.1 中哈希的行为发生了一点变化

2.1.2 :008 >   {"foo": "bar"}
SyntaxError: (irb):8: syntax error, unexpected ':', expecting => {"foo": "bar"}
   ^

2.2.1 :003 >   {"foo": "bar"}
 => {:foo=>"bar"}

这就是为什么我建议的最后两个选项只在 2.2.1 中有效的原因