的ActiveRecord :: MultiparameterAssignmentErrors

时间:2014-03-29 15:13:45

标签: ruby activerecord ruby-on-rails-4

我是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

1 个答案:

答案 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,但返回的值没有真正意义(总是一个),这可能有点误导。