2012-04-07 8 views
1

私はこの単純なヘルパーを持っています。値が文字列であるならば、私はそれぞれの変数にそれらを保存すると、すべての変数は、たとえば、カンマで区切られた値を使用して1つの文字列として返す:Rubyの文字列操作

"<a href=http://a>A</a>, <a href=http://b>B</a>, <a href=http://c>C</a>" 

は、どのように私は、彼らが存在する場合にのみ、変数をマージすることができます?

答えて

4
def printe_result(data) 
    { 'A' => data.a_value, 'B' => data.b_value, 'C' => data.c_value }.map do |name, val| 
    "<a href='http://#{val}'>#{name}</a>" unless val.blank? 
    end.compact.join(',') 
end 
+0

本当にクールなソリューション! – user984621

+0

これは、Railsを使用しているか、ActiveSupportのコア拡張が必要であることを前提としています。これは、['blank?'](http://api.rubyonrails.org/classes/Object.html#method-i-blank- 3F)が由来する。もしそうでなければ 'val.nil? || val.empty? '。私はあなたがURLとデータベース参照のためにRailsを持っていると仮定しました。 –

0

私はあなたの質問が正しいことを望みます。defined?(variable_name)メソッドを使用して、変数が定義されているかどうかを確認できます。

こちらがお役に立てば幸いです。

[[a_value,'A'],[b_value,'B'],[c_value,'C']].select {|(value, label)| !value.blank?}. 
    map {|(value, label)| %q[<a href="http://#{value}">#{label}</a>]}.join(',') 

よう

+1

は ''定義され、この場合には役に立たない?https://gist.github.com/e76db37917284e30dbb8 –

2

何かがトリックを行うべき:目的のテキストにラベルを回すと一緒に文字列を結合するために参加するためにマップ、空白のラベルとのペアを解消するために選択を使用します。

+0

これは、シンタックスハイライトは、文字列リテラルのように混乱してしまいます残念です。 –