使用rails 3.0未保存日期字段?

时间:2012-08-02 23:02:17

标签: ruby-on-rails-3

我有一个ActiveRecord,当我点击保存时,所有记录都会保存,但日期除外。

我的控制器

class UsersController < ApplicationController

def create
  puts params[:user]
   @user1 = User.new(params[:user])
   if @user1.save
    saveduser = User.where("fbid = ?",params[:user][:fbid])
    unless saveduser.first.nil?
    session[:user] = saveduser.first
   end
   puts "user saved "
  redirect_to "/users/dashboard"
  else
    puts "error while saving user"
  end  
 end

视图

<h3>User Details</h3>
 <%= form_for(@user) do |f| %>
<table>
  --some columns
<tr>
  <td><%= f.label :state %></td>
  <td> <%= f.text_field :state %></td>
</tr>
<tr>
  <td><%= f.label :dob %></td>
  <td> <%= f.text_field :dob %></td>
</tr>
  <%= f.hidden_field :fbid  %>
 </table> 
  <%= f.submit %>
<% end %>
<table>

在UserController中调用create方法时的控制台中。我可以看到

{"username"=>"xxxx.xx.94", "firstname"=>"xxxx", "lastname"=>"Raxxstogi", "emaild"=>"xx.xxx@gmail.com", "city"=>"Los Angeles", "country"=>"USA", "state"=>"CA", "dob"=>"08/13/1983", "fbid"=>"xxx"}

我的数据库表格列是

dob | date | YES | | NULL |

哪里出错?

谢谢

3 个答案:

答案 0 :(得分:2)

您正在使用表单中的text_field保存到数据库中的Date类型字段中。请尝试使用此处所述的日期帮助程序方法: http://guides.rubyonrails.org/form_helpers.html#using-date-and-time-form-helpers

答案 1 :(得分:2)

Ruby不了解您的日期格式。您可以通过使用Date::strptime显式解析日期来修复此问题,可能在模型中作为setter方法:

class User < ActiveRecord::Base
  def dob=(date)
    date = Date.strptime(date, '%m/%d/%Y') if date.is_a?(String)
    write_attribute(:dob, date)
  end
end

但是,我会建议在Rails中使用日期助手,除非你知道格式每次都是相同的。

答案 2 :(得分:0)

这可能是您日期格式的问题。您可以配置活动记录以接受此格式,也可以使用strftime或类似内容将日期参数转换为Date对象