Converting String to Date before save with Rails

谁说胖子不能爱 提交于 2019-12-21 08:49:29

问题


Very new to Ruby and I've been stuck for hours. Searching everywhere and can't find an answer.

So I'm using the bootstrap datepicker for rails gem.

Because I've changed the date format of the datepicker, it won't store in the DB. Guessing this is because the simple_form input is being used as a string to avoid the default date selection inputs applied by simple_form.

My question is: How do I modify/convert a string like "06/18/2013" to a date before it is saved to the db? Is this best handled by the controller?

My controller:

# PUT /events/1
# PUT /events/1.json
def update
  @event = Event.find(params[:id])

  # Ugghhhh I need help
  # @event.event_date = Date.parse(params[:event_date]).to_date

  respond_to do |format|
    if @event.update_attributes(params[:event])
      format.html { redirect_to @event, :notice => 'Event was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render :action => "edit" }
      format.json { render :json => @event.errors, :status => :unprocessable_entity }
    end
  end
end

DB Schema:

  create_table "events", :force => true do |t|
    t.string   "event_name"
    t.string   "event_location"
    t.date     "event_date"
    t.time     "event_time"
    t.text     "event_content"
    t.datetime "created_at",                       :null => false
    t.datetime "updated_at",                       :null => false
    t.integer  "user_id"
    t.boolean  "approved",       :default => true
    t.integer  "category_id"
  end

This is the server log:

  Started PUT "/events/1" for 127.0.0.1 at 2013-06-14 02:37:15 -0700
  Processing by EventsController#update as HTML
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"RYMdJ0lFmvG0+nVIsTtJXu5fyD/L3/WAKsk9FX6WWgo=", "event"=>{"user_id"=>"1", "category_id"=>"3", "event_name"=>"A Event Name", "event_location"=>"Event Location", "event_date"=>"06/13/2013", "event_time(1i)"=>"2000", "event_time(2i)"=>"1", "event_time(3i)"=>"1", "event_time(4i)"=>"02", "event_time(5i)"=>"18", "event_content"=>"First night"}, "commit"=>"Update Event", "id"=>"1"}
    User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
    Event Load (0.1ms)  SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1  [["id", "1"]]
     (0.0ms)  begin transaction
     (0.0ms)  commit transaction
  Redirected to http://localhost:3000/events/1
  Completed 302 Found in 4ms (ActiveRecord: 0.3ms)

回答1:


You can use strptime in the controller.

DateTime.strptime("06/18/2013", "%m/%d/%Y")



回答2:


The correct one should be

DateTime.strptime( "02/06/2014", "%d/%m/%Y").strftime("%Y-%m-%d")



来源:https://stackoverflow.com/questions/17105617/converting-string-to-date-before-save-with-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!