Три текстовых поля для одной записи базы данных для рельсов

В настоящее время у меня есть одно текстовое поле для записи даты, я пытаюсь разделить год, месяц и день на три отдельные записи, разделенные "/". Исходный текст выглядит так:

<%= f.text_field :date, :placeholder => 'YYYY/MM/DD' %>

Я хотел бы разбить это на три текстовых поля и добавить их вместе и поместить в запись даты в базе данных. Как я могу это сделать?

3 ответа

Вы часто используете текстовые поля для дат, потому что вам требуется только одно поле. Когда у вас есть три разных поля, вы должны использовать вместо этого select. У Rails есть метод помощника даты date_select, так что это будет примерно так:

<%= f.date_select :date %>

Это создает один выбор для лет, один в течение нескольких месяцев и один в течение нескольких дней. Вы можете прочитать больше на http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select


Добавьте к модели три виртуальных атрибута:

attr_accessor :form_month, :form_day, :form_year

Затем добавьте следующее в контроллер, а не в модель:

def create
 # ...
 form_date = [ params[:form][:form_month], \
 params[:form][:form_day] , 
 params[:form][:form_year] ].join("/")
 @my_model.date = Date.parse(form_date)
 # ... save and return ...
end

Было бы неплохо вручную проверить каждый параметр формы на достоверность. Date#parse может вытолкнуть неверную дату, если вы указали неполную строку даты.

Date.parse "2005/11/4"
# => Fri, 04 Nov 2005
Date.parse "/11/4"
# => Mon, 04 Nov 2013


Попробуйте использовать https://github.com/plataformatec/simple_form

<%= f.input :deadline, :start_year => Date.today.year, :end_year => Date.today.year + 1, :order => [:day, :month, :year] %>

У вас есть много вариантов.

licensed under cc by-sa 3.0 with attribution.