如何将 link_to 作为一个块进行插值

How to interpolate link_to as a block

我正在尝试在一个将被多次调用的助手的插值中制作一个 link_to 块(link_to 与 do),所以我只想让这段代码在我的项目。但是当我尝试执行下面的代码时,我得到了错误 "Unexpected keyword class, expecting keyword_do or '{' or '('" 所以我不知道该怎么做或者是否可行。 link_to 块位于一些 html 代码之间,并且与它连接在一起,这就是为什么我需要底部的 html_safe。

def example_helper_method()
  example_string = ""
  example_string += "SOME HTML ..."
  example_string += "#{ link_to edit_foo_url(param1, param2, param3: 1) do }"
  example_string += "<button class='btn btn-small #{foo_method(1)}' type='button'>Example</button>"
  example_string += "#{end}"
  example_string += "SOME HTML ..."
  return example_string.html_safe
end

这是我在视图中调用此方法的地方

<%= example_helper_method() %>

谢谢:D

link_to returns 一个字符串那么为什么你需要所有的插值?您想要将第二个字符串从里到外翻转并移动 html_safe 调用,但像这样应该可以解决问题:

def example_helper_method()
  example_string  = ''
  example_string += "SOME HTML ..."
  example_string += link_to edit_foo_url(param1, param2, param3: 1) do
    "<button class='btn btn-small #{foo_method(1)}' type='button'>Example</button>".html_safe
  end
  example_string + "SOME HTML..."
end

link_to 应该返回一些已经 HTML 安全的东西,所以你不需要 html_safe 它 returns 的东西。当您在字符串中构建 HTML 时,您确实希望在块内进行 html_safe 调用。您可能需要也可能不需要 html_safe 调用 SOME HTML 字符串,具体取决于实际存在的内容。