2015-11-08 3 views
0

Я получаю объект JSON и гнездовой массив с помощью Rails 4 апи с Params так:Update массив с сильными параметрами Rails 4

{ 
    "token" => "123" 
    "lessons" => [ 
    { 
     "token_id" => "j12l3n123", 
     "attr_1" => "hello", 
     "attr_2" = "is it me you're looking for" 
    }, 
    { 
     "token_id" => "j12l", 
     "attr_1" => "Nope", 
     "attr_3" = "You're not." 
    } 
    ] 
} 

И у меня есть контроллер так:

def update_all 
    #fetch collection with one db hit 
    token_ids = params[:lessons].map{|l| l[:token_id]} 
    @lessons = Lesson.where(token_id: token_ids) 

    params[:lessons].each do |l| 
     lesson = @lessons.detect { |lesson| lesson.token_id == l[:token_id] } 
     # How do I update the record with strong params? 
     lesson.update_attributes(lesson_params) 
    end 
end 

private 

def lesson_params 
    params.permit(
    :attr_1, 
    :attr_2, 
    :attr_3 
    ) 
end 

Как обновить каждую запись с правильным объектом в массиве и использовать сильные параметры для этого?

ответ

1
def update_all 
    lesson_params.each do |l| 
     lesson = Lesson.where(token_id: l[:token_id]).first 
     lesson.update_attributes(l) 
    end 
end 

private 

def lesson_params 
    params.require(:lessons).map do |l| 
     ActionController::Parameters.new(l.to_hash).permit(
      :attr_1, 
      :attr_2, 
      :attr_3 
     ) 
    end 
end 
0

def lesson_params params.permit(:token, lessons: [:token_id, :attr_1, :attr_2, :attr_3 ]) end

в контроллер что-то вроде следующих

def update_all lesson_params[:lessons].each do |lesson_param| lesson = Lesson.find(lesson_param[:token_id]) lesson.update_attributes(lesson_param) end end

+0

Как использовать это в контроллере? –

+0

Не работает для меня, спасибо, что нашли время ответить. В любом случае, я уже нашел решение, которое работает и отправил ответ. –

Смежные вопросы