2015-02-26 8 views
0

В моем приложении я пытаюсь обрезать строку тегов, которые отображаются. Я пытался делать это таким образом:Rails усекает строки в массиве

<%= @medium.marker_list.map { |m| 
     link_to truncate('+ ' + m.titleize, length: 5), 
       :controller => "media", :action => "index", :media => m 
    }.join(' ').html_safe %> 

Проблема заключается в том, что если строка больше 5 заменяет всю строку с многоточием вместо замены только символы, которые длиннее заданной длины.

Как это получить правильно?

Я создаю теги через драгоценный камень, действующий как тега.

** EDIT **

Так что, если у меня есть список тегов, как это: example, test, product, listing

возвращает это: ..., test, ..., ...

, когда оно должно быть возвращение этого: examp...,test,produ..., listi...

+1

Просьба представить примерный список тегов , выход, который вы получаете, и ожидаемый результат. –

ответ

1

Попробуйте это:

%w(example test product listing).map { |w| w.size > 5 ? w[0,5] + "..." : w } 

Выход:

[examp..., test, produ..., listi...] 

Так что в вашем коде вы могли бы реализовать, что, как это (непроверенные):

# Helper method 
def truncate_tag(tag) 
    tag.size > 5 ? tag[0,5] + "..." : tag 
end 

# View 
<%= @medium.marker_list.map { |m| 
    link_to truncate_tag(m.titleize), 
    :controller => "media", 
    :action => "index", 
    :media => m 
}.join(' ').html_safe %> 
+0

Хороший ответ, но я думаю, что это должно быть 'w.size> 5', в противном случае пятибуквенные слова также будут иметь эллипсы. («хлеб» становится «хлебом ...») – SteveTurczyn

+0

Как я могу использовать это в моей «link_to»? Я сделал это '<% = medium.marker_list.map {| m | link_to '+' + m.titleize, {: controller => "media",: action => "index",: media => m}, m.size> 5? m [0,5] + "...": m} .join ('') .html_safe%> ', но он выдает эту ошибку:' undefined method 'stringify_keys' для "examp ...": String' – iamdhunt

+0

Я обновил свой ответ на примере. –

0

Как насчет перехода на простой рубиновый раствор

<%= @medium.marker_list.map { |m| 
     link_to "+ {m.titalize}".gsub("+ {m.titalize}"[5..-1],"..."), 
       :controller => "media", :action => "index", :media => m 
    }.join(' ').html_safe %>