使用强参数Rails 4更新数组

时间:2015-11-08 03:19:15

标签: ruby-on-rails ruby ruby-on-rails-4 strong-parameters

我通过带有params的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

如何使用数组中的正确对象更新每条记录,并使用强参数来执行此操作?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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