2013-04-13 3 views
10

Я пытаюсь сохранить массив, используя драгоценный камень strong_parameters. Но у меня возникают проблемы с тем, как форма отправляет мой массив. В PARAMS выглядеть следующим образом:Serialize array with strong_parameters

> params[:circuit] 
=> {"title"=>"Some title", ..., "viewable_tasks"=>{"0"=>"woop", "1"=>"dee", ...}} 

И моя circuit_params функция выглядит следующим образом: я не могу

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks: { }, ...) 
end 

получить синтаксис, чтобы мой PARAMS работать. Что я получаю в моей консоли:

> circuit_params 
=> {"title"=>"implement plug-and-play mindshare", 
"viewable_tasks"=>{"0"=>nil, "1"=>nil, "2"=>nil}, ... 

В моей модели у меня есть:

class Circuit < ActiveRecord::Base 
    serialize :viewable_tasks, Array 
    ... 
end 

Я заметил, что я могу заставить его правильно работать с атрибутами я называю accepts_nested_attributes_for на, так что это может быть что-то делать это.

Спасибо за любую помощь

ответ

14

Я просто была такая же проблема, и это был правильный синтаксис:

def circuit_params 
    params.require(:circuit).permit(:title, :id, {:viewable_tasks => []}, ...) 
end 
+1

Спасибо! Спасибо Спасибо! –

-1

Попробуйте использовать это:

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks:[], ...) 
end 
+1

Это не работает для меня. Я получаю синтаксическую ошибку. –

+1

Как я уже сказал, хеши должны обязательно находиться в конце параметров разрешения – Hamdan

0

Сериализованный элементы должны быть в конец разрешающих параметров. По моему опыту (и я точно не знаю почему), вы не можете вводить другой несертифицированный элемент после сериализации ... попробуйте и сообщите нам об этом.

+1

Это из-за синтаксиса Ruby. Это не ограничение Rails. Ruby позволяет хешу быть в конце списка параметров, не закрывая его в {braces}. Если хэш не заканчивается, он должен быть в фигурных скобках. –

+0

lol .. не знал, что .. thanx ... но почему? – Hamdan

+0

Я не уверен, почему, @ Хамдан. Возможность оставить фигурные скобки с конца хэша в конце, вероятно, для удобства и удобочитаемости и поощрения условного обозначения хэша, являющегося последним параметром. В методе Rails 'allow', BTW, вы полностью можете поставить хэш в начале или в середине списка, если вы используете фигурные скобки. –