0

コードがあります

file_paths = {nature:[], nature_thumb:[]}

正常に動作する Elsif バージョン:

 Find.find('public/uploads') do |path|
   if path =~ /.*nature.*\.(jpg|png|gif)$/ and  path !~  /.*nature\/thumb.*\.(jpg|png|gif)$/
     file_paths[:nature] << path
   elsif
     path =~ /.*nature\/thumb.*\.(jpg|png|gif)$/
     file_paths[:nature_thumb] << path
     #etc
   end 
 end

ケースバージョンが問題を引き起こす

 Find.find('public/uploads') do |path|
   case 
   when path =~ /.*nature.*\.(jpg|png|gif)$/, path !~ /.*nature\/thumb.*\.(jpg|png|gif)$/ 
     file_paths[:nature] << path
   when path =~ /.*nature\/thumb.*\.(jpg|png|gif)$/
     file_paths[:nature_thumb] << path
     # etc
   end
 end

コンマの代わりに「&&」を入れると、エラーが発生します。コンマが正しく動作しません。これを回避する方法は?

4

2 に答える 2

2

ケースステートメントは次のようになります。

Find.find('public/uploads') do |path|

   case 
       #Surround your statement with parenthesis
       when ((path =~ /.*nature.*\.(jpg|png|gif)$/) && (path !~ /.*nature\/thumb.*\.(jpg|png|gif)$/)) 
         file_paths[:nature] << path
       when path =~ /.*nature\/thumb.*\.(jpg|png|gif)$/
         file_paths[:nature_thumb] << path
         # etc
       end
    end  
于 2013-02-26T18:21:10.360 に答える
2

ケースの順序を変更します。

Find.find('public/uploads') do |path|
  case path
  when /.*nature\/thumb.*\.(jpg|png|gif)$/
    file_paths[:nature_thumb] << path
  when /.*nature.*\.(jpg|png|gif)$/
    file_paths[:nature] << path
  end
end

またはあなたの状況でより良い:

Find.find('public/uploads') do |path|
  file_paths[
    case path
    when /.*nature\/thumb.*\.(jpg|png|gif)$/ then :nature_thumb
    when /.*nature.*\.(jpg|png|gif)$/        then :nature
    end
  ] << path
end
于 2013-02-26T19:21:17.017 に答える