2016-09-21 6 views
2

以下は私のコードです。このコードを単純化するには?
私はあまりにも多くの&&条件を避けたいです。Rubyであまりにも多くのAND/ORを単純化する方法

私は2つのURLきたとします

ipt_string = www.abc.com/catogories/profile/heels/ 

ipt_string = www.abc.com/me/payment/auth/ 

    def to_uri(ipt_string) 
     point = ipt_string.gsub('{', '#{') 
     if @profile && 
      !point.include?('/catogories/') && 
      !point.include?('/profile/') && 
      !point.include?('/heels/') && 
      !point.include?('/me/') && 
      !point.include?('/payment/') && 
      !point.include?('/auth/') 
     { ... } 
+2

「poin」とはt? – GolfWolf

+0

def to_uri(ipt_string) ポイント= ipt_string.gsub( '{'、 '#{') –

+0

は文字列ですか? – GolfWolf

答えて

5

最初のオプション:

if @profile && (%w(a b c d e) & point.split('')).none? 

その他のオプションは、正規表現を使用することです:@Stefanはコメントで指摘したように

if @profile && !point.match(/[abcde]/) 

を、やや短いバージョン:

それはあなたが探している特定の文字列があるので、URLが '/heels/'

が含まれているかどうかをチェックする

上のOPのコメントに関しては


、私はのチェックだと思います含まれること:

if @profile && !point.include?('/heels/') 

EDIT

あなたがpoint以内に、あなたが行くことができるかどうかを確認したいlist_of_stringsを持つ:

if @profile && list_of_strings.none? { |str| point.include?(str) } 
+0

スペースを含まない文字列は最初のテストで失敗するでしょうか? – lcguida

+0

@lcguida確かに、 '.split( '')'、編集、ありがとう! –

+2

少し短く: '@profile && point!〜/ [abcde] /' – Stefan

2

あなたが正規表現でmatchを使用することができます。

> "a string of text".match(/[abcde]/).nil? 
=> false 
> "a string of text".match(/[zq]/).nil? 
=> true 
+0

私は、ペット '!〜/ [abcde] /#=> false; 'pot'!〜/ [abcde] /#=> true'。 –

0
if @profile && (/[abcde]/.match(point)).nil? 

または

if @profile && (/[abcde]/ =~ point).nil? 
関連する問題