我是rails 4的新手。我正在使用time_select
在我的观看中显示时间。
在创建新事件对象时,我收到如下错误:
ActiveRecord::MultiparameterAssignmentErrors (1 error(s) on assignment of
multiparameter attributes [error on assignment [12, 15] to time_begin
(Missing Parameter - time_begin(1))]):
观点:
<%= f.time_select :time_begin, :ampm => true, include_blank: true, :disabled => true %>
在我的控制器中:
我试过这样的方式:
params = event_params
hours = params['time_begin(4i)']
minutes = params['time_begin(5i)']
date = Date.strptime(params[:event_start], "%Y-%m-%d")
date = DateTime.civil(date.year,date.month, date.day, hours.to_i, minutes.to_i, 0, 0)
params[:time_begin] = date
@event = Event.new(params)
private
def event_params
params.require(:event).permit(:time_begin)
end
答案 0 :(得分:1)
您需要将数据库字段修改为time
而不是date_time
。以下迁移应该:
def up
change_column :events, :time_begin, :time
end
def down
change_column :events, :time_begin, :datetime
end
请注意,这两种类型在数据库中的存储方式相同,不同之处在于当您将列指定为时间时,rails将清除(或者更确切地说是重新分配)其日期部分。不幸的是,这意味着你可以调用start_time.day
,但返回的值没有真正意义(总是一个),这可能有点误导。