在 link_to 方法中使用 ActiveAdmin 的 status_tag 导致标记呈现两次

dsc*_*etz 1 activeadmin ruby-on-rails-4

link_to我在尝试使用ActiveAdmin 的帮助程序创建超链接时遇到了一些意外行为status_tag。将 a 传递status_tag给该link_to方法会导致标签呈现两次。

具体来说,如果您有 ActiveAdmin 资源,请将其命名为 Foo.rb:

ActiveAdmin.register Foo do
  index do
     column "Bar" do |hh|
        link_to status_tag('test', label: 'testing', class: 'error'), edit_admin_bar_path(hh.bar)
     end
  end
end
Run Code Online (Sandbox Code Playgroud)

这会在索引表中生成以下 html:

<td class="col col-bar">
  <span class="status_tag test error">testing</span>
    <a href="/admin/bar/1/edit">                          
       <span class="status_tag test error">testing</span>
    </a>
</td>
Run Code Online (Sandbox Code Playgroud)

查看 的源代码status_tag我不禁想知道它在super构建方法中调用时是否渲染标签,并在完成时返回ActiveAdmin::Views::StatusTag并将该值传递给link_to。但我并不完全确定。

我在 Google 上找不到与此问题相关的任何其他问题或任何特定于此问题的内容。这是某些期望行为的副作用吗?或者这个用例不是这些方法之一的设计目的?

我在用着:

  • 活动管理 (1.0.0.pre2 0ac35b7)
  • 导轨 4.2.5.2

提前致谢。

小智 5

解决方法可能是将 status_tag 包装到新的 Arbre 上下文中。这应该避免将标签直接写在主上下文上

像这样的东西:

link_to Arbre::Context.new { status_tag('test', label: 'testing', class: 'error') }, edit_admin_bar_path(hh.bar)

我知道……看起来很丑!但是您可以将其放入 Rails 帮助程序中或将其编码为 Arbre 组件。