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 中有效的原因
我开始使用 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 中有效的原因