2016-11-28 94 views
0

我得到像这样的参数:Parameters: {"utf8"=>"✓", "events"=>{"363"=>{"name"=>"3"}}, "new_events"=>[{"name"=>"1"}, {"name"=>"2"}], "date"=>"2016-11-01"} 我想要做的是从new_events阵列的哈希创建事件,但它并没有让我因为它neets被大量分配消毒。 这是event_params的样子:Rails批量创建阵列散列

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 

但林不知道它是做

回答

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! 
+0

new_events不是事件的成员。 –

+0

new_events与事件哈希分离,它是一个哈希数组。我试图同时创建和更新 –