2017-10-25 9 views
1

私はRuby(レールヘルパー)で、書きたいことがあるメソッドを持っています。ハッシュとして多くのオプションが必要なメソッドです。オプションはそこにありません、それはあまりにもいくつかのデフォルトを持っています。デフラグオプションとルビのブロックでより良いメソッドを書く

それは現在、次のようになります。

def some_html_helper(options = {}, &block) 
    option1 = options.fetch(:option1, "default option1 value") 
    option2 = options.fetch(:option2, "default option2 value") 
    option3 = options.fetch(:option3, "default option3 value") 
    option4 = options.fetch(:option4, "default option4 value") 
    option5 = options.fetch(:option5, "default option5 value") 
    option6 = options.fetch(:option6, "default option6 value") 
    "return html with options used here and content... #{capture(&block)}" 
    end 

は、だから、一つまたはオプションなし、残りを渡すことも可能ですが、このように、デフォルト値を持っている:

<%= some_html_helper option3: "not default value", do %> 
    Some content... 
<% end %> 

は書くための良い方法はありますこのような方法?

ありがとうございました。デフォルト値を持つ

答えて

2

使用キーワードパラメータ:

def m(o1: 42, o2: :foo, o3: :bar, &block) 
    puts [o1, o2, o3].inspect 
end 

m(o3: 3.14) 
#⇒ [42, :foo, 3.14]  

か。代わりに、ダブルスプラットを使用してください:

def m(**options, &block) 
    options = {o1: 42, o2: :foo, o3: :bar}.merge options 
    puts options.values.inspect 
end 

m(o3: 3.14) 
#⇒ [42, :foo, 3.14]  
関連する問題