Słyszałem, że kilka osób narzekało i zamieszczało pytania o masowe zadania w Railsach. Mam ten sam błąd kilka razy i wszystko co zrobiłem to attr_accessible
. Ale czym dokładnie jest przydział masy? czy ktoś mógłby wyjaśnić na przykładzie?Co to jest mass-assignment w Railsach 3
Odpowiedz
Mass Assignment to nazwa, którą Rails nadaje do tworzenia obiektu z parametrem hash. Jest to "przypisanie masy" polegające na tym, że przypisujesz wiele wartości atrybutom za pośrednictwem jednego operatora przypisania.
Poniższe fragmenty przeprowadzić masową przypisanie atrybutu name
i topic
modelu Post
:
Post.new(:name => "John", :topic => "Something")
Post.create(:name => "John", :topic => "Something")
Post.update_attributes(:name => "John", :topic => "Something")
Aby to działało, model musi umożliwić masowe zadania dla każdego atrybutu w hash jesteś . przekazując
Istnieją dwie sytuacje, w których nie będzie to:
- masz
attr_accessible
deklaracja która robi nie obejmują:name
- masz
attr_protected
który robi obejmują:name
Niedawno stał się domyślnym że atrybuty musiały być ręcznie białej liście poprzez attr_accessible
w celu masowego przypisania odnieść sukces. Wcześniej, domyślny był dla atrybutów być przypisane chyba że były one wyraźnie na czarnej liście attr_protected
lub dowolny inny atrybut był biało-wymienione z attr_acessible.
Ważne jest, aby rozważyć, które atrybuty mogą być masa przypisana ponieważ kod jak tak jest często:
@post = Post.new(params[:post])
zwykle jest stosowany, gdy użytkownik podnosi postać świadczonych przez form_for @post
. W idealnym świecie wartość mieszania params[:post]
powinna zawierać tylko te pola, które wyświetliliśmy w formularzu. Łatwo jest jednak użytkownikowi przekazać dodatkowe pola w żądaniu, więc w efekcie pozwalasz użytkownikowi ustawić dowolne pola na @post
, a nie tylko te wyświetlane w formularzu.
Nieprzestrzeganie bezpiecznie korzystać masową zadanie doprowadziło do kilku błędów wysokim profilu w niektórych dość dużych Rails aplikacji, jak ten, który pozwolił kogoś inject their own public key do listy zaufanych kluczy na repozytorium GitHub i pchnąć kod bezpośrednio do repozytorium one nie powinien mieć dostępu do.
- 1. Co to jest "zasób" w Railsach?
- 2. W 3 minuty, Co to jest odbicie?
- 3. Co to jest odpowiednik Swift 3 NSURL.URLByAppendingPathComponent()?
- 4. Routing środowiskowy w Railsach 3
- 5. Wysyłanie biuletynów w Railsach 3
- 6. Jak to zrobić() z włączeniami() w Railsach 3
- 7. Łączenie ciągów w Railsach 3
- 8. Co to jest [....] w Rubim?
- 9. Co to jest zamiana NSTimer.scheduledTimerWithTimeInterval() w swift 3?
- 10. Co to jest klasa ModelState w MVC 3?
- 11. Co to jest błąd w projekcie ASP.NET MVC 3 RTM?
- 12. Co to jest operator modulus (%) w swift 3?
- 13. Co to jest {} + {} w JavaScript?
- 14. Co to jest @. w Perlu?
- 15. Jak wyłączyć przetwarzanie XML w Railsach 3
- 16. Co to jest __kernel_vsyscall?
- 17. Przekazywanie parametrów do wydajności w Railsach 3 (lub jest to możliwe?)
- 18. Żądania HTTP HEAD w Railsach 3
- 19. Co to jest Serializable? Co to znaczy?
- 20. Aptana Studio 3 Co to jest przestrzeń robocza?
- 21. Co to jest "usuń to"?
- 22. Jak dostosować odpowiedź to_json w Railsach 3
- 23. Co to jest @ @ w Perlu?
- 24. Co to jest === w javascript?
- 25. Co to jest @ @ w Bash?
- 26. Co to jest: w php?
- 27. Co to jest @ $ w perlu?
- 28. Co to jest `$?` W Powershell?
- 29. Co to jest %% w Happy?
- 30. Co to jest "==" w C?
Sprawdź to: http://railscasts.com/episodes/26-hackers-love-mass-assignment. Chociaż może to być trochę przestarzałe, podstawowe zasady pozostają takie same. –
UWAGA: ** Railsy 4 ** lepiej radzą sobie z przypisaniem masy z [** strong parameters **] (http://weblog.rubyonrails.org/2012/3/21/strong-parameters/) w kontrolerze zamiast ochrony w modelu. Zobacz [** ten artykuł **] (http://net.tutsplus.com/tutorials/ruby/mass-assignment-rails-and-you/), aby uzyskać dokładne wyjaśnienie, czym jest przypisanie masy i techniki Rails 3/4. – Yarin