Дата рельсов меняется в зависимости от модели - PullRequest
0 голосов
/ 10 октября 2011

У меня есть форма с выбором даты.

У меня есть следующая форма:

<%= date_select :user, :birthday, {:start_year => Time.now.year, :end_year => 1910,:order => [:day,:month,:year], :prompt => { :day => 'day', :month => 'month', :year => 'year' }}, { :class => "default" } %>             

Проверка в моей модели:

validates :birthday, :if => :should_validate_birthday?,
           :presence => {:message => "Please enter your friend's birthdate"},
           :date =>     { :after => Date.civil(1910,1,1), :before => Date.today, :message => "Please enter a valid date"}

Вотпример того, что пользователь отправляет в журнал:

"user"=>{"name"=>"rewrwe", "birthday(3i)"=>"1", "birthday(2i)"=>"", "birthday(1i)"=>"2008", "email"=>""}}

Обратите внимание, что значение месяца пустое.

В контроллере я создаю пользователя

create
@user = User.new(params[:user])

If @user.save
#go to the confirm page
end

end

Сообщения об ошибках не отображаются, хотя месяц отсутствует, потому что по какой-то причине, когда я пытаюсь сохранить модель, она преобразует пустой месяц в «январь» или 01.

Это очень расстраивает, так как я этого не делаюхотите, чтобы пользователи отправляли неверные данные случайно.

Как я могу помешать Rails сделать это и убедиться, что вся информация о дате отправлена?

1 Ответ

1 голос
/ 10 октября 2011

Разделите три поля с помощью attr_accessor:

class User < ActiveRecord::Base
  attr_accessor :birthday_year, :birthday_month, :birthday_date
  validates_presence_of :birthday_year, :birthday_month, :birthday_date
  # ...
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...