Rails JSON вложени атрибути

Работя върху API на Rails 4, където клиентът може да публикува данни към контролера и той ще ги запише в база данни. Чудех се как мога да внедря потребителя в POST вложен JSON и след това да накарам контролера да приеме атрибутите и да създаде модел с тях. JSON ще изглежда нещо подобно

{
  'identifier': {
    'name': 'Test'
  }
}

След това в частен метод, който имам

def parameters
    params.respond_to?(:permit) ?
        params.require(:picture).permit(:identifier) :
        params[:picture].slice(:identifier) rescue nil
  end

И когато се опитам да осъществя достъп до параметъра „име“ в моя контролер като parameters[:identifier][:name] получавам недефиниран метод []. Някакви предположения?

Създаване на действие

@picture = current_user.pictures.new(name: parameters[:identifier][:name])

Моделът на снимката има само t.string :name


person ny95    schedule 28.07.2013    source източник
comment
Публикувайте кода за действие за създаване на вашия контролер и също какви полета имате в базата данни, т.е. вашите модели   -  person CuriousMind    schedule 28.07.2013


Отговори (2)


Изглежда, че JSON има низа 'identifier' като ключ, докато вие се опитвате да получите достъп до него със символ :identifier, който връща nil. Така че [] не е дефинирано на nil. Вероятно трябва да направите parameters["identifier"]["name"].

person sawa    schedule 28.07.2013

Можете да използвате вложени JSON, стига да ги създадете във вашите разрешени параметри като:

  def parameters
    params.respond_to?(:permit) ?
        params.require(:picture).permit(:identifier => [ :name ]) :
        params[:picture].slice(:identifier => [ :name ]) rescue nil
  end

Това работи на Rails 4, използвайки силни параметри

person ny95    schedule 29.07.2013