2011-03-24 44 views
0

現在我正在將日期保存爲mm/dd/yyyy格式的字符串,但想要轉換爲date_select,但由於某種原因我一直收到錯誤。rails date_select

這裏是我使用
形式

<%= f.date_select :start_date %> 

模型

validates :start_date, :presence => true 

的代碼,但我從我的控制器錯誤消息,它不適合PARAMS。

回答

1

這是由於Rails自動查看數據庫列來確定要存儲哪種類型的對象的方式。在這種情況下,Rails正在尋找一個Datetime列來與date_select幫助器一起使用,但是它正在尋找一個varchar列。

我會跑遷移砸START_DATE列,並將它重新添加爲datetime列,像這樣

要生成一個新的遷移:

rails generate migration [name of your migration] 

你的情況是這樣的:

rails generate migration change_start_date_column_to_timestamp 

這將在您的RAILS_ROOT/DB /遷移文件夾中的文件,它看起來像:

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 

然後,當軌拉從數據庫中的數據,它會自動將其轉換爲Ruby的Time對象。

警告一句話...這會破壞start_date字段中的數據。所以如果你有預先存在的信息需要保存,你需要做一些更復雜的事情。

+0

我得到bash remove_column命令未找到 – tomciopp 2011-03-24 03:16:13

+0

您需要從遷移內部運行它,可以在這裏找到相關文檔(http://api.rubyonrails.org/classes/ActiveRecord/Migration.html) – jaredonline 2011-03-24 03:30:56

+0

我跑鋼軌生成遷移remove_column(:table_name,:start_date)是不是這樣? – tomciopp 2011-03-24 03:40:59