Idkt
Idkt

Reputation: 2996

Why does Play refuse form reporting "Cannot resolve method apply with such signature: Missing arguments"?

I have a pretty extensive form defined as;

case class EditDetail(token: String,
                      placeId: Long,

                      // accessibility
                      privateParking: Option[Boolean],
                      privateParkingType: Option[Int], // 0: internal, 1: external, 3: street
                      bikeParking: Option[Boolean],
                      valetService: Option[Boolean],
                      wheelChairAccess: Option[Boolean],

                      //  facilities
                      cashOnly: Option[Boolean],
                      paymentMeans: Option[List[String]], // comma separated Option[List[String]]s
                      wifi: Option[Int],
                      smoking: Option[Boolean],
                      aircon: Option[Boolean],

                      //  dining
                      dietaryRestrictions: Option[List[String]],
                      mealsServed: Option[List[String]],
                      alcoholChoice: Option[List[String]],
                      outdoorSeating: Option[Boolean],
                      catering: Option[Boolean],

                      //  reservation
                      acceptsReservations: Option[Int] /*, // 0: no, 1: yes, 2: only groups
                           reservationMethods: Option[List[String]], // <-- the problem area
                           reservationUrl: Option[String],
                           groupSizeMin: Option[Int],
                           groupSizeMax: Option[Int],

                           //  delivery & takeaway
                           delivery: Option[Boolean],
                           minDeliveryAmt: Option[BigDecimal],
                           takeAway: Option[Boolean],

                           // atomosphere
                            musicType: Option[List[String]],
                            ambiance: Option[List[String]],
                            attire: Option[List[String]],
                            surrounding: Option[List[String]],
                            viewPoint: Option[Boolean],
                            goodForKids: Option[Boolean],
                            tv: Option[Boolean],
                            sportsFeatured: Option[List[String]]*/) {
  var place: Place = _
  var user: User = _
}

var editDetailForm = Form(
  mapping(
    "token" -> nonEmptyText,
    "place_id" -> longNumber,
    /*ACCESSIBILITY*/
    "private_parking" -> optional(boolean),
    "private_parking_type" -> optional(number(0, 3)),
    "bike_parking" -> optional(boolean),
    "valet_service" -> optional(boolean),
    "wheelchair_access" -> optional(boolean),
    /*FACILITIES*/
    "cash_only" -> optional(boolean),
    "payment_means" -> optional(list(text)),
    "wifi" -> optional(number(0, 2)),
    "smoking" -> optional(boolean),
    "aircon" -> optional(boolean),
    //    /*DINING OPTIONS*/
    "dietary_restrictions" -> optional(list(text)),
    "meals_served" -> optional(list(text)),
    "alcohol_choice" -> optional(list(text)),
    "outdoor_seating" -> optional(boolean),
    "catering" -> optional(boolean),
    /*RESERVATIONS*/
    "accepts_reservations" -> optional(number)
    //    "reservation_methods" -> optional(list(text)) // <-- problem area
    //    "reservation_url" -> optional(text),
    //    "group_size_min" -> optional(number(0)),
    //    "group_size_max" -> optional(number(0)),
    //    /*DELIVERY & TAKEAWAY*/
    //    "delivery" -> optional(boolean),
    //    "min_delivery_amount" -> optional(bigDecimal),
    //    "takeaway" -> optional(boolean),
    //    /*ATMOSPHERE*/
    //    "music_type" -> optional(list(text)),
    //    "ambiance" -> optional(list(text)),
    //    "attire" -> optional(list(text)),
    //    "surrounding" -> optional(list(text)),
    //    "view_point" -> optional(boolean),
    //    "good_for_kids" -> optional(boolean),
    //    "tv" -> optional(boolean),
    //    "sports_featured" -> optional(list(text))
  )(EditDetail.apply)(EditDetail.unapply))

If you see the code above and see the line marked with <-- problem area, if I uncomment that line in the EditDetail and in editDetailForm, I get this:

Cannot resolve method apply with such signature: Missing arguments

Why?

Upvotes: 3

Views: 1310

Answers (1)

user908853
user908853

Reputation:

That's because you exceeded the maximum number of fields for a single tuple (18), here is what the Play doc says:

Note: Maximum number of fields for a single tuple or mapping is 18 due to the way form handling is implemented. If you have more than 18 fields in your form, you should break down your forms using lists or nested values.

Upvotes: 7

Related Questions