Rails декодирует даты окончания сеанса?

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

Я использовал date_select для создания страницы с тремя полями для создания даты, и поэтому мой сеанс заканчивается следующими полями:

  {"CompanyUk"=>{"company_number"=>"12345",
 "incorporation_date(1i)"=>"2011",
 "incorporation_date(2i)"=>"5",
 "incorporation_date(3i)"=>"27"}}
  

Какой хороший способ восстановить дату из трех отдельных полей? Очевидно, я могу извлекать их по одному и собирать заново, но это кажется большим количеством дополнительного кода по сравнению с тем, что было бы возможно.

Ответ №1:

 ((1..3).map { |i| session['CompanyUk']["incorporation_date(#{i}i)"] } * '/').to_date
  

Комментарии:

1. Хорошо, спасибо, это не слишком болезненно. Я надеялся, что будет вспомогательная функция.

Ответ №2:

У меня было:

 datemap = params["CompanyUk"].select {|k,v| k.start_with? "incorporation_date"}
inc_date = Date.new(*(datemap.values.map {|x| x.to_i}))
  

Что является более сложным, чем решение Мори.

Альтернативно, на основе решения Мори, но без конкатенации строк:

 Date.new *((1..3).map { |i| params['CompanyUk']["incorporation_date(#{i}i)"].to_i })