使用强参数更新数组 Rails 4

Update array with strong parameters Rails 4

我通过 Rails 4 api 接收一个 JSON 对象和嵌套数组,参数如下:

{
  "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

如何使用数组中的正确对象更新每条记录,并使用强参数来做到这一点?

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

在 Controller 中类似以下内容

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

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