rails date_select

时间:2011-03-24 02:38:11

标签: ruby-on-rails date

现在我将日期保存为格式为mm / dd / yyyy的字符串,但想转换为date_select但由于某种原因我一直收到错误。

这是我正在使用的代码 表格

 <%= f.date_select :start_date %>

模型

 validates :start_date, :presence => true

但我从控制器那里得到一个错误,说它不符合参数。

1 个答案:

答案 0 :(得分:1)

这是因为Rails自动查看数据库列以确定将在哪里存储的对象类型。在这种情况下,Rails正在寻找一个与date_select帮助器一起使用的Datetime列,而是找到一个varchar列。

我会运行迁移以删除start_date列,并将其重新添加为datetime列,如此

要生成新迁移:

rails generate migration [name of your migration]

在你的情况下:

rails generate migration change_start_date_column_to_timestamp

这将在RAILS_ROOT / db / migrations文件夹中生成一个文件,该文件类似于:

class ChangeStartDateColumnToTimestamp < ActiveRecord::Migration
  def self.up
  end

  def self.down
  end
end

你需要修改它看起来像:

class ChangeStartDateColumnToTimestamp < ActiveRecord::Migration
  def self.up
    remove_column :table_name, :start_date
    add_column :table_name, :start_date, :timestamp
  end

  def self.down
    remove_column :table_name, :start_date
    add_column :table_name, :start_date, :string
  end
end

然后,当rails从数据库中提取数据时,它会自动将它们转换为Ruby Time对象。

请注意......这将破坏start_date字段中的数据。因此,如果您预先存在需要保留的信息,则需要执行更复杂的操作。