Rails' #link_to 在 ERB 外部使用时是否只接受其块中的一个参数?
Does Rails' #link_to only accept one parameter in its block when used outside of ERB?
当我在 ERB 中执行此操作时,它按预期工作,给我一个 a
标签,它环绕着图像和一些文本
<%= link_to(...) do %>
<img src="..." />
text
<% end %>
但是当我试图将其放入一个方法中时,a
标记仅包含最后一个参数,在本例中为文本。
def build_link
link_to(...) do
image_tag(...)
text
end
end
查看 docs,他们只给出了在 ERB 中使用 link_to
的示例,因此假设在方法中使用它效果不佳并且不能'不接受两个参数?
跟进我的评论:
行为发生的原因是 Ruby 处理块的方式,以及 Rails 处理 ActionController 输出的方式。
这里的技巧是使用得心应手的花花公子 concat
。
def build_link
link_to("#") do
concat image_tag("http://placehold.it/300x300")
concat "hello world"
end
end
假设您传递给 link_to
的块只是另一种方法,它会返回一些 object/value。在这种情况下,您的 text
对象将被返回。
但是因为你想同时输出 image_tag
和 text
,所以你需要将它们一起传递给输出。
当我在 ERB 中执行此操作时,它按预期工作,给我一个 a
标签,它环绕着图像和一些文本
<%= link_to(...) do %>
<img src="..." />
text
<% end %>
但是当我试图将其放入一个方法中时,a
标记仅包含最后一个参数,在本例中为文本。
def build_link
link_to(...) do
image_tag(...)
text
end
end
查看 docs,他们只给出了在 ERB 中使用 link_to
的示例,因此假设在方法中使用它效果不佳并且不能'不接受两个参数?
跟进我的评论:
行为发生的原因是 Ruby 处理块的方式,以及 Rails 处理 ActionController 输出的方式。
这里的技巧是使用得心应手的花花公子 concat
。
def build_link
link_to("#") do
concat image_tag("http://placehold.it/300x300")
concat "hello world"
end
end
假设您传递给 link_to
的块只是另一种方法,它会返回一些 object/value。在这种情况下,您的 text
对象将被返回。
但是因为你想同时输出 image_tag
和 text
,所以你需要将它们一起传递给输出。