Rails 4 Unpermitted Parameters for Array

Mam pole tablicy w moim modelu i próbuję je zaktualizować.

Moja metoda silnego parametru jest poniżej

def post_params
  params["post"]["categories"] = params["post"]["categories"].split(",")

  params.require(:post).permit(:name, :email, :categories)
end

Moje działanie w kontrolerze jest następujące

def update
  post = Post.find(params[:id]

  if post and post.update_attributes(post_params)
    redirect_to root_url
  else
    redirect_to posts_url
  end
end

Jednak za każdym razem, gdy przesyłam aktualizację posta, w moim dzienniku rozwoju widzę

Unpermitted parameters: categories

Przekazywane parametry to

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10", 

"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}}

Chcę myśleć, że ma to coś wspólnego z faktem, że atrybut categories jest tablicą, ponieważ wszystko inne wygląda dobrze. / Align = "left" / , Mogę się mylić. Co jest nie tak z moim kodem i dlaczego nie pozwala mi zapisać pola kategorii, gdy wyraźnie jest to dozwolone? Dzięki.

Author: thank_you, 2013-07-25

5 answers

Spróbuj tego

params.require(:post).permit(:name, :email, :categories => [])

(Zignoruj mój komentarz, to chyba nie ma znaczenia)

 143
Author: Slicedpan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 21:45:00

W rails 4, czyli

params.require(:post).permit(:name, :email, {:categories => []})
 44
Author: Imtiaz Emu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 04:24:34

Dozwolone typy skalarne to String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile i Rack::Test::UploadedFile.

Aby zadeklarować, że wartość w params musi być tablicą dozwolonych wartości skalarnych Mapuj klucz do pustej tablicy:

params.permit(:id => [])

To jest to, co dokumentacja mocnych parametrów na Githubie mówi:

params.require(:post).permit(:name, :email, :categories => [])
Mam nadzieję, że ci się uda.
 10
Author: Mohammad Abu Musa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 20:43:34

Miałem ten sam problem, ale w moim przypadku musiałem też zmienić z:

<input type="checkbox" name="photographer[attending]" value="Baku">

Do:

<input type="checkbox" name="photographer[attending][]" value="Baku">

Mam nadzieję, że to komuś pomaga.
 1
Author: Carlo S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 18:24:43

Miałem ten sam problem, ale samo dodanie tablicy do zezwolenia nie wystarczyło. Też musiałem dodać Typ. W ten sposób:

params.require(:transaction).permit(:name, :tag_ids => [:id])

Nie jestem pewien, czy jest to idealne rozwiązanie, ale po tym, dziennik "Nieprzestrzeganych parametrów" zniknął.

Znalazłem podpowiedź na to rozwiązanie z tego doskonałego posta: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters

 1
Author: Heikki Hannula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-18 09:11:52