LoginSignup
26
26

More than 5 years have passed since last update.

Rails TextHelperまとめ

Last updated at Posted at 2013-01-25

Rails APIにのっているのを日本語でまとめただけ

concat

<% concat "foo" %>
# == <%= "foo" %>

View側でロジック書きながら、画面にも反映させたい場合に使えるかも。

<%
  if @current_user
    concat current_user.name
  else
    concat "Guest"
  end
%>

使ったことはない。

cycle & current_cycle

非常によく使う。

コピペ

<% @items.each do |item| %>
  <div style="background-color:<%= cycle("red","white","blue") %>">
    <span style="background-color:<%= current_cycle %>"><%= item %></span>
  </div>
<% end %>

これ使わないとこうなるはず(動くかは知らない)

<% colors = %w(red white blue) %>
<% @items.each_with_index do |item, i| %>
  <% color = colors[i % 3] %>
  <div style="background-color:<%= color %>">
    <span style="background-color:<%= color %>"><%= item %></span>
  </div>
<% end %>

reset_cycleもあるようだ。

excerpt

使う頻度は低い。

でも、知らないと困るケース結構ある

2つ目の引数の文字が最初に見つかったところから、radius文字分だけ取り出し、
それ以外の部分は omission(デフォルトは...)にする

<%= excerpt("あいうえおかきくけこさしすせそ", "く", radius: 3) %>
# => "...おかきくけこさ..."

この場合は、最初にが見つかった箇所の前後3文字を取り出してそれ以外は...にしている。

highlightと組み合わせて次のように使えるかもしれない。

検索された文字を中心として30文字取り出し、検索文字をハイライト表示させる例

<% str =<<-EOS
吾輩は猫である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
EOS
%>
<%= highlight(excerpt(str, "薄暗い", radius: 30, omission: ''), "薄暗い") %>

吾輩は猫である より

highlight

文字列中の指定された文字を強調表示させる。

デフォルトの強調表示させるタグは<strong class="highlight">...</strong>

またもやコピペ(非常にわかりやすい)

highlight('You searched for: rails', 'rails', :highlighter => '<a href="search?q=\1">\1</a>')
# => You searched for: <a href="search?q=rails">rails</a>

なお、2つ目の引数は配列が指定可能。

highlight('You searched for: rails', ['for', 'rails'], :highlighter => '<em>\1</em>')
# => You searched <em>for</em>: <em>rails</em>

truncate

有名人なはず。

文字列の先頭からlength分だけ切り出してくれる。

omission + 切り出した文字列 = lengthとなるように調整するため、
若干の注意が必要。

<%= truncate("あいうえおかきくけこ", length: 5) %>
# あい...
<%= truncate("あいうえおかきくけこ", length: 9) %>
# あいうえおか...
<%= truncate("あいうえおかきくけこ", length: 10) %>
# あいうえおかきくけこ

デフォルトのomission...(3文字)であるので、
length: 5とした場合は、元の文字列は2文字しか表示されないことになる。

word_wrap

文字列中の指定された位置(line_width)以降に出現する空白文字の箇所に\nをいれてくれる

日本語圏だと使えない子のようにも見える

<%= word_wrap("あいうえお かきくけこ さしすせそ", line_width: 5 %>
# =>
あいうえお\n
かきくけこ さしすせそ

※line_widthを指定しない場合は 80文字
※line_width文字目以降に出現する\sなので、上記例の場合は line_width: 4にしても同じ結果になる
※かくくけこ[全角空白]さしすせそ

、。全角空白 でも\nが入るようになれば、あるいは使えるかもしれない。

26
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26