繁体   English   中英

Rails从哈希数组大量创建

[英]Rails mass create from array of hash

我得到这样的Parameters: {"utf8"=>"✓", "events"=>{"363"=>{"name"=>"3"}}, "new_events"=>[{"name"=>"1"}, {"name"=>"2"}], "date"=>"2016-11-01"}Parameters: {"utf8"=>"✓", "events"=>{"363"=>{"name"=>"3"}}, "new_events"=>[{"name"=>"1"}, {"name"=>"2"}], "date"=>"2016-11-01"}我想做的是根据new_events哈希数组创建Events,但是不让我来,因为它需要进行大规模分配以进行消毒。 这是event_params的样子:

 def event_params
  params.require(:events).permit(:id, :name, :start_time, :user_id)
end

此设置是因为我想在按Submit时更新和/或创建新记录。 我目前的做法是

params[:new_events].each_with_object({}) do |e|
    Event.create(name: e[:name], user_id: current_user.id, start_time: params[:date])
end

但是我不确定这是正确的方法

您应该能够清除参数数组:

params.require(:events).permit(new_events: [:name])
Event.create(params[:new_events] do |new_event|
    new_event.user = current_user
end

但是请注意,无论如何,您都必须遍历对象,因此并没有太大的区别。 您可能只想使用Event.new进行循环并将它们作为一个组进行验证:

events = Event.new(params[:new_events]) do |new_event|
    new_event.user = current_user
    ...
end

if events.any?(&:invalid?)
    [error handling]
else
    events.save!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM