Rails从哈希数组中大量创建

时间:2016-11-28 19:14:23

标签: ruby-on-rails

我得到这样的参数:Parameters: {"utf8"=>"✓", "events"=>{"363"=>{"name"=>"3"}}, "new_events"=>[{"name"=>"1"}, {"name"=>"2"}], "date"=>"2016-11-01"} 我想要做的是从new_events哈希数组中创建事件,但它不允许我因为它需要对大规模分配进行消毒。 这就是event_params的样子:

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

此设置是因为我想在按提交时更新和/或创建新记录。 我这样做的当前方式是

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

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

1 个答案:

答案 0 :(得分:0)

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

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!