如何将link_to插入为块

时间:2015-01-02 22:42:52

标签: ruby ruby-on-rails-4 ruby-on-rails-3.2 link-to

我试图在插值中为一个将被多次调用的帮助器创建一个link_to块(link_to with do),所以我只想在我的项目中使用这个代码一次。但是,当我尝试执行下面的代码时,我得到错误"意外的关键字类,期待关键字_或{' {'或者'('"所以我不知道如何做到这一点或者它是否可能.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

1 个答案:

答案 0 :(得分:3)

link_to返回一个字符串,为什么你需要所有的插值?你想要将第二个字符串从里到外调出并移动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它返回的内容。当您在字符串中构建HTML时,您确实希望在块内部进行html_safe调用。您可能需要html_safe根据SOME HTML字符串进行{{1}}次调用,具体取决于实际情况。