2017-08-28 48 views
1

我在Active Admin工作,我使用link_to所以当我点击一个用户,我因为某些原因,而不是超链接,我看到的HTML用户配置文件。Rails - 活动管理HTML出现而不是超链接

我已经尝试了两种方法

首先

row 'Users' do 
    User 
     .joins(:permissions) 
     .where(permissions: {admin: true}) 
     .map{|x| link_to(x.email, [:admin, x]).html_safe } 
     .join(', ') 
    end 

使用这种方法,我看到<a href="/admin/users/171625">[email protected]</a>而不是超链接

row 'Users' do 
    User 
     .joins(:permissions) 
     .where(permissions: {admin: true}) 
     .map{|x| div (link_to(x.email, [:admin, x])).html_safe} 
     .join(', ') 

    end 

使用这种方法我在浏览器中看到的是如下 的超链接和超链接 enter image description here

row 'Users' do 
    User 
     .joins(:permissions) 
     .where(permissions: {admin: true}) 
     .map do |user| 
     raw(link_to user.email, admin_user_path(user)) 
     end 
     .join(', ') 
    end 

结果的原始的HTML:显示为一个HTML以及

如果有人能告诉我我做错了什么,我将非常感激。我要的只是将用户链接到他们的个人资料页面。

+0

你的第一个例子是* *的链接。 –

+1

使用“原”后做的声明 –

+0

@杰克布拉肯是第一个是链接,但它不呈现为链接,它呈现为html – Saadia

回答

1

当你使用html_safe或者raw(raw helper将会调用html_safe)时,你会得到一个ActiveSupport::SafeBuffer的实例,它在渲染时不会被转义。 但是,如果您采用ActiveSupport::SafeBuffer的数组(例如您的示例)并将其应用join,那么您将获得一个String实例,该实例将被转义。

所以你必须申请rawhtml_safe所得到的字符串:

row 'Users' do 
    raw(User 
     .joins(:permissions) 
     .where(permissions: { admin: true }) 
     .map do |user| 
     link_to user.email, admin_user_path(user) 
     end 
     .join(', ')) 
    end 

    row 'Users' do 
    (User 
     .joins(:permissions) 
     .where(permissions: { admin: true }) 
     .map do |user| 
     link_to user.email, admin_user_path(user) 
     end 
     .join(', ')).html_safe 
    end 

或使用safe_join加入ActiveSupport::SafeBuffer S:

row 'Users' do 
    safe_join(User 
      .joins(:permissions) 
      .where(permissions: { admin: true }) 
      .map do |user| 
       link_to(user.email, admin_user_path(user)).html_safe 
       end, ', ') 
    end 
+1

你能不能解释这是怎么解决问题的?这与问题中提到的任何解决方案有何不同?我不想复制和粘贴,我想了解我做错了什么。 – Saadia

+0

我已经更新了答案。 – lightalloy