块形式的link_to删除href

时间:2015-09-13 23:06:07

标签: ruby-on-rails ruby-on-rails-4

为什么我的应用程序助手中的此方法在视图中返回不可见?

def sortable(column, title = nil)
  title ||= column.titleize
  d = (column == sort_column && sort_direction == 'asc') ? 'desc' : 'asc'
  link_to(title, sort: column, direction: d) do
    content_tag(:i, nil, class: "fa fa-#{sort_direction}")
  end
end

如果link_to 不是与图标类嵌套,它可以正常工作,即效果很好:

def sortable(column, title = nil)
  title ||= column.titleize
  d = (column == sort_column && sort_direction == 'asc') ? 'desc' : 'asc'
  link_to(title, sort: column, direction: d)
end

我需要做什么才能显示图标?它在源代码中显示得很好......

invisible

它只在表格中留下一个空白单元格。有什么想法吗?

更新

link_to的阻止形式似乎从href移除了a。请参阅上面的屏幕截图并与之比较:

what the hell

发生了什么?

此处拨打sortable

<th><%= sortable 'client_code', 'Client ID' %></th>

2 个答案:

答案 0 :(得分:1)

问题是fa-asc不存在,因此是空白单元格。您应该使用fa-sort-asc(请参阅Font Awesome icon set)。

关于您的更新,link_to的第一个参数是 url ,而您将标题作为字符串传递给它(请参阅{{3} })。尝试这样的事情:

link_to(users_path, sort: column, direction: d) do
  (title + ' ' + content_tag(:i, nil, class: "fa fa-sort-#{sort_direction}")).html_safe
end

请注意,您必须连接标题,因为当使用link_to作为块时,整个正文由块定义。您还需要使用html_safe才能正确输出。

答案 1 :(得分:1)

当给出一个块时,D具有以下签名

link_to

所以在你的通话中看起来它会选择后一个版本(link_to(options = {}, html_options = {}) do # name end link_to(url, html_options = {}) do # name end )。

问题是你根本没有传递网址,所以如果你看它正在使href成为你的url, html_options client_id。

由于在使用阻止表单时无法轻松传入url和所需选项,(看起来就像是跟随一个railscast?)

也许是这样的。

制作一个字形助手..(我把它作为应用程序助手)

title

然后使用它将标志符号添加到标题调用中并删除该块..

def glyph(*names)
  classes = names.map{|name| "fa-#{name.to_s.gsub('_','-')}" }.unshift 'fa'
  content_tag :i, nil, class: classes
end