Rails + Slim:如何将link_to标签与控制器和动作名称一起使用; 和锚标记中的嵌套内容

kei*_*m23 0 ruby-on-rails slim-lang ruby-on-rails-4

这就是我现在所拥有的:

li
  = link_to {:controller => "controllername", :action => "actionname"}
    span.glyphicon.sidebar-icon.glyphicon-ok-circle
    span   WhoHas
Run Code Online (Sandbox Code Playgroud)

然而,这将不起作用,因为link_to期望它的第一个参数是锚标记内的内容.我想在锚标签内的内容是以下span块.

任何帮助将非常感激!

Jer*_*odi 7

你说的这个:

但是这不起作用,因为link_to期望它的第一个参数是锚标记内的内容.

这不是真的. link_to也可以接受一个块,它将使用块的内容代替:

link_to("/path/to/thing") do 
  "My link"
end
Run Code Online (Sandbox Code Playgroud)

并且,因此,不需要将第一个参数用作链接的文本. 文档列出了以下签名:

link_to(body, url, html_options = {})
  # url is a String; you can use URL helpers like
  # posts_path

link_to(body, url_options = {}, html_options = {})
  # url_options, except :method, is passed to url_for

link_to(options = {}, html_options = {}) do
  # name
end

link_to(url, html_options = {}) do
  # name
end
Run Code Online (Sandbox Code Playgroud)

最后两个选项是您正在寻找的.

但是,你的代码不起作用的真正原因是因为你使用没有括号的大括号 - 基本上,method { :hello => "world" }你没有做你认为它做的事情.在method { }语法保留给数据块,因此它期待一个块的内容-它没有找到.相反,它找到了一个为哈希保留的键值关联.从本质上讲,Ruby试图将其解释为块,但失败了.所以你的选择是用括号括起来,如下:method({ :hello => "world" })或者删掉大括号,如下所示:method :hello => "world".你还需要do在你的最后添加一个link_to内容为一个块,所以你的代码现在看起来像这样:

li
  = link_to :controller => "controllername", :action => "actionname" do
    span.glyphicon.sidebar-icon.glyphicon-ok-circle
    span   WhoHas
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.