How to get a Date from date_select or select_date in Rails?

后端 未结 7 1322
小鲜肉
小鲜肉 2020-11-30 04:05

Using select_date gives me back a params[:my_date] with year, month and day attributes. How do get a Date ob

7条回答
  •  南笙
    南笙 (楼主)
    2020-11-30 04:32

    Using date_select gives you 3 separate key/value pairs for the day, month, and year respectively. So you can pass them into Date.new as parameters to create a new Date object.

    An example date_select returned params for an Event model:

    "event"=>
     {"name"=>"Birthday",
      "date(1i)"=>"2012",
      "date(2i)"=>"11",
      "date(3i)"=>"28"},
    

    Then to create the new Date object:

    event = params[:event]
    date = Date.new event["date(1i)"].to_i, event["date(2i)"].to_i, event["date(3i)"].to_i
    

    You may instead decide to wrap this logic in a method:

    def flatten_date_array hash
      %w(1 2 3).map { |e| hash["date(#{e}i)"].to_i }
    end
    

    And then call it as date = Date.new *flatten_date_array params[:event]. But this is not logic that truly belongs in a controller, so you may decide to move it elsewhere. You could even extend this onto the Date class, and call it as date = Date.new_from_hash params[:event].

提交回复
热议问题