въвеждането на дата в проста_форма не е избрано

Използвам simple_form и трябва да изберете дата като 3 отделни полета за въвеждане (ден месец година).

Това е, което имам, но определено не е това, което искам.

<%= f.date_select :date_of_birth, start_year: Date.today.year - 16,
                            end_year: Date.today.year - 100,
                            order: [:day, :month, :year], label: false %>

Благодаря за помощта!

Към момента просто предполагам, че ще трябва да заменя моя date_of_birth с 3 полета в DB и просто да напиша метод, който ще ги събере в действителна дата на раждане, което виждам като грозен път и се надявах, че има по-добър.


person Andrey Deineko    schedule 04.12.2014    source източник


Отговори (2)


Опитвам

= date_select 'object_name', :date_of_birth

Където трябва да замените 'object_name' с вашето име на обект. Например 'user' за потребителски клас и т.н.

Но имайте предвид, че такъв подход може да наруши вашето маркиране, защото simple_form добавя свои собствени div и други обвивки към полетата на формуляра. Така че трябва да добавите и тях.

person Stanislav Mekhonoshin    schedule 04.12.2014
comment
благодаря за отговора! Беше доста спешно, така че се спрях на 3 полета в DB и метод на асемблиране. - person Andrey Deineko; 05.12.2014

Реших просто да добавя 3 полета към базата данни:

  t.integer :birth_day
  t.integer :birth_month
  t.integer :birth_year

напишете някои проверки:

  validates :birth_day, 
            numericality: { only_integer: true, message: "Please enter numbers only." }, 
            length: { is: 2, message: "Should be 2 digits." },
            inclusion: { in: 1..31, message: 'should be in range 1..31'}
  validates :birth_month, 
            numericality: { only_integer: true, message: "Please enter numbers only." }, 
            length: { is: 2, message: "Should be 2 digits." },
            inclusion: { in: 1..12, message: 'should be in range 1..31'}
  validates :birth_year, 
            numericality: { only_integer: true, message: "Please enter numbers only." }, 
            length: { is: 4, message: "Should be 4 digits." },
            inclusion: { in: 1900..1996, message: 'should be in range 1900..1996'}

и напишете метод към метод, сглобяващ обект за дата:

  def date_of_birth
    "#{birth_day}/#{Date::MONTHNAMES[birth_month]}/#{birth_year}".to_date
  end
person Andrey Deineko    schedule 05.12.2014