Объедините 3 выбранных поля и подтвердите как одно в моей пользовательской модели в ruby ​​on rails 3 - PullRequest
1 голос
/ 26 июня 2011

Хорошо, у меня есть 3 поля для выбора даты рождения.

В моей модели User настроены константы, чтобы указать месяцы, годы и т. Д.

В любом случае, я могу успешно проверить эти поля выбора отдельно.

Что я хочу сделать - это объединить: день,: месяц и: год и сохранить в: день рождения и проверить всю дату как единое целое, чтобы я мог вернуть 1 ошибку, а не чем 3 отдельных.

Это также облегчит сохранение проверенной даты в поле моего дня рождения в моей базе данных.

Часть моей формы

    <td> <%= f.input :day, :required => false, :label => "Birthday: " , :prompt => "Day", :collection => User::DAYS  %></td>
 <td> <%= f.input :month, :label => false, :prompt => "Month", :collection => User::MONTHS %> </td> 
 <td> <%= f.input :year, :label => false, :prompt => "Year", :collection => User::YEAR_RANGE %> </td> 

Часть пользовательской модели

МЕСЯЦЕВ = ["Январь", 1], ["Февраль", 2], ["Март", 3], ["Апрель", 4], ["Май", 5], ["Июнь", 6], ["Июль", 7], ["Август", 8], ["Сентябрь", 9], ["Октябрь", 10], ["Ноябрь", 11], ["Декабрь", 12] # закончить эти ДНИ = 1..31 # закончить это START_YEAR = Time.now.year - 106 END_YEAR = Time.now.year YEAR_RANGE = START_YEAR..END_YEAR

класс User

validates_presence_of: day,: message => «В какой день месяца ты родился?»
validates_presence_of: month,: message => «В каком месяце ты родился?»
validates_presence_of: year,: message => «Какой у вас год рождения?»

конец

Ответы [ 2 ]

2 голосов
/ 26 июня 2011

Я бы изменил столбец на datetime (дата никогда не работает для меня).

  t.datetime :birthday

Затем используйте date_select в вашем представлении.

  <div class="field">
    <%= f.label :birthday %><br />
    <%= f.date_select :birthday, :include_blank => true, :start_year => Time.now.year - 70 %>
  </div>

Затем в вашей модели проверьте наличие дня рождения.

  validates_presence_of :birthday

Если вам нужно убедиться, что день рождения старше определенного возраста, напишите пользовательскую проверку.

  validate :of_certain_age

private

  def of_certain_age
    if self.birthday
      errors.add(:base, 'You need to be at least 18.') if self.birthday > 18.years.ago
    end
  end
0 голосов
/ 26 июня 2011

Если я не упускаю вашу точку зрения полностью, вам просто нужна пользовательская проверка.Это пример того, как это сделать.

----- код начала модели ------

validate :check_date_validity

def check_date_validity 

  date_submitted = Date.strptime("#{self.year}/#{self.month}/#{self.day}" , "%Y/%m/%d")
  errors.add(:birthday, "does not look right") if date_submitted < Date.today  #for example

end

----- код начала просмотра ------

<%= f.select( :day, User::DAYS ) %>

<%= f.select( :month, User::MONTHS ) %>

<%= f.select( :year, User::YEAR_RANGE ) %>

См. Документацию по направляющим для пользовательской проверки для получения дополнительной информации.

...