2017-05-31 11 views
2

私はページに表示する3つの属性、length,height、およびを持っています。は条件付きでルビの属性を返します

オブジェクトで4番目の属性(variable_dimensions)がtrueに設定されている場合(他の属性のデータを入力する必要がないため)、「Dimensions variable」という文字列を返します。 widthがnilの場合、length x heightを返信します。それ以外の場合はlength x height x widthを返します。

私はこれをヘルパーとして試みました。

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions == true 
     return "Dimensions variable" 
    elseif width.nil? 
     dimensions = length, height 
     return dimensions 
    else 
     dimensions = length, height, width 
     return dimensions 
    end 
    end 
end 

dimensions_variableがtrueに設定されている場合に機能します。それは、可変次元を持つオブジェクトで私が望むことを実行します。他の2つのケースでは、widthがnilの場合は[60.3、35.4、nil]、それ以外の場合は[39,45.3,30.4]のような配列としてページに出力されます。 10cm x 30cm x 48cmのようにアレイのスタイリングを削除するにはどうすればよいですか?以前私はこれを文字列補間で試みましたが、アンチパターンであると言われました。あなたはこのような何か行うことができます

+3

あなたの[前の質問](https://stackoverflow.com/questions/44273038/check-if-variables-are-null-and-if-not-print)を見てみると、あなたはタッドマンが試していたことを誤解していることは明らかですあなたに伝えるために。文字列補間は反パターンではありません。特定の構造体 "#{x}"(文字列が単一の '#{...}補間式以外のものを含んでいます)は反パターンです。これは 'x.to_s'に相当します。 "#{x} cm x#{y} cm x#{z} cm" 'は反パターンではありません。 –

答えて

3

を、あなたはどのnil次元削除できます。

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions 
     "Dimensions variable" 
    else 
     [length, height, width].compact.map do |dim| 
     "#{dim}cm" 
     end.join(' x ') 
    end 
    end 
end 

をまた、returnまたは== trueのための必要はありません。

2

compactを使用して

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions 
     "Dimensions variable" 
    elsif width.nil? 
     "#{length}cm x #{height}cm" 
    else 
     "#{length}cm x #{height}cm x #{width}cm" 
    end 
    end 
end 
関連する問題