Uwaga : jeśli nadal chcesz używać attr_accessible, musisz dodać protected_attributesdo swojego Gemfile. W przeciwnym razie będziesz mieć do czynienia z RuntimeError.
W dokumencie nie stwierdzono, że attr_accessiblenależy go usunąć. Co się stanie, jeśli go zatrzymamy?
lulalala
12
Otrzymasz błąd, jeśli nie wprowadzisz żadnych zmian w swoim pliku Gemfile. RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
użytkownik
6
Świetne wyjaśnienie. Wydaje się jednak, że w praktyce powoduje to odsuwanie Railsów od modelu tłuszczu, cienkiego kontrolera itp. W kierunku cienkich modeli i naprawdę rozdętych kontrolerów. Musisz napisać wszystkie te rzeczy dla każdego wystąpienia, nie ładnie czyta, a zagnieżdżanie wydaje się być problemem. Stary attr_accessible / attr_accessor w systemie modelowym nie był uszkodzony i nie musiał być naprawiany. W tym przypadku jeden post na blogu stał się zbyt popularny.
rcd
1
Nie musisz obsługiwać dozwolonych parametrów w kontrolerach. W rzeczywistości jest to naruszenie zasady pojedynczej odpowiedzialności. Spójrz na następujący wpis na blogu edelpero.svbtle.com/strong-parameters-the-right-way
Pierre-Louis Gottfrois
3
Więc wymyślni i często zmieniający się apis, w połączeniu z nowo odkrytą pedantiką, marnują wiele godzin programistów w kolejnej bolesnej aktualizacji Railsów :-(
Brian Takita
22
Jeśli wolisz attr_accessible, możesz użyć go również w Rails 4. Powinieneś zainstalować go jak klejnot:
gem 'protected_attributes'
potem możesz użyć attr_accessible w swoich modelach jak w Rails 3
I myślę, że to najlepszy sposób - używanie obiektów formularzy do radzenia sobie z przypisywaniem masy i zapisywanie zagnieżdżonych obiektów, a także w ten sposób można używać klejnotu chronionych atrybutów
classNestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,:telephone, as::create_params
def create_objects(params)SomeModel.new(sanitized_params(params,:create_params))endend
Kiedy używasz „silnych parametrów”, filtrujesz parametry w warstwie kontrolera i nie sądzę, że jest to najlepszy pomysł dla wszystkich aplikacji. Dla mnie najlepszym sposobem filtrowania parametrów jest użycie dodatkowej warstwy. I możemy użyć klejnotu „chronione_atrybuty” do napisania tej warstwy
edikgat
4
Możemy użyć
params.require(:person).permit(:name,:age)
gdzie person to Model, możesz przekazać ten kod do metody person_params i użyć zamiast params [: person] w metodzie create lub metodzie
attr_accessible
należy go usunąć. Co się stanie, jeśli go zatrzymamy?RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
Jeśli wolisz attr_accessible, możesz użyć go również w Rails 4. Powinieneś zainstalować go jak klejnot:
potem możesz użyć attr_accessible w swoich modelach jak w Rails 3
I myślę, że to najlepszy sposób - używanie obiektów formularzy do radzenia sobie z przypisywaniem masy i zapisywanie zagnieżdżonych obiektów, a także w ten sposób można używać klejnotu chronionych atrybutów
źródło
Możemy użyć
gdzie person to Model, możesz przekazać ten kod do metody person_params i użyć zamiast params [: person] w metodzie create lub metodzie
źródło
Aktualizacja dla Rails 5:
wydaje się już nie działać. Ale daj:
klejnot „protected_attributes_continued”
próba.
źródło
1) Zaktualizuj Devise, aby mógł obsługiwać Rails 4.0, dodając ten wiersz do Gemfile aplikacji:
Następnie wykonaj:
2) Dodaj starą funkcjonalność
attr_accessible
ponownie do szyn 4.0Spróbuj użyć
attr_accessible
i nie komentuj tego.Dodaj tę linię do pliku Gemfile aplikacji:
Następnie wykonaj:
źródło