0

Ruby マジックを使用して、(if/else-if ステートメントの束になる前に) コードをリファクタリングしようとしています。ただし、コード ブロックをハッシュの値として使用しようとすると、次のエラーが発生します。

syntax error, unexpected '}', expecting tASSOC :restaurant => { Cuisine.all },

この同じエラーが、次の行と次の行 (:hotelおよび:attraction) で繰り返されます。

ここで間違っていることは何ですか?

def moderation_categories(klass) 
  klass_map = {
    :restaurant => { Cuisine.all },
    :hotel      => { Category.where(place_type: "Hotel") },
    :attraction => { Category.where(place_type: "Attraction") }
  }
  list = []
  klass_map[klass.to_sym].call.each { |c| list << c.name }

  list.sort
end
4

1 に答える 1

4

ブロックは、ラムダ(コードブロック)として機能するだけではありません。ラムダまたはProcとして指定する必要があります。

  klass_map = {
    :restaurant => lambda{ Cuisine.all },
    :hotel      => lambda{ Category.where(place_type: "Hotel") },
    :attraction => lambda{ Category.where(place_type: "Attraction") }
  }
于 2012-10-24T23:12:35.693 に答える