Come viene utilizzato attr_accessible in Rails 4?

attr_accessible sembra non funzionare più all’interno del mio modello.

Qual è il modo per consentire l’assegnazione di massa in Rails 4?

Rails 4 ora utilizza parametri forti .

La protezione degli attributi è ora eseguita nel controller. Questo è un esempio:

 class PeopleController < ApplicationController def create Person.create(person_params) end private def person_params params.require(:person).permit(:name, :age) end end 

Non è più necessario impostare attr_accessible nel modello.

Trattare con accepts_nested_attributes_for

Per poter utilizzare accepts_nested_attribute_for con parametri forti, è necessario specificare quali attributi annidati devono essere autorizzati nella whitelist.

 class Person has_many :pets accepts_nested_attributes_for :pets end class PeopleController < ApplicationController def create Person.create(person_params) end # ... private def person_params params.require(:person).permit(:name, :age, pets_attributes: [:name, :category]) end end 

Le parole chiave sono autoesplicative, ma nel caso in cui, puoi trovare maggiori informazioni sui parametri forti nella guida di Rails Action Controller .

Nota : se si desidera ancora utilizzare attr_accessible , è necessario aggiungere protected_attributes al proprio Gemfile . Altrimenti, ti troverai di fronte a un RuntimeError .

Se preferisci attr_accessible, puoi usarlo anche in Rails 4. Dovresti installarlo come gem:

 gem 'protected_attributes' 

dopodiché potresti usare attr_accessible nei tuoi modelli come in Rails 3

Inoltre, e penso che sia il modo migliore – usare gli oggetti di forma per occuparsi dell’assegnazione di massa, e salvare oggetti nidificati, e puoi anche usare la gem protected_attributes in questo modo

 class NestedForm include ActiveModel::MassAssignmentSecurity attr_accessible :name, :telephone, as: :create_params def create_objects(params) SomeModel.new(sanitized_params(params, :create_params)) end end 

Possiamo usare

 params.require(:person).permit(:name, :age) 

dove person è Model, puoi passare questo codice su un metodo person_params e usare al posto di params [: person] nel metodo create metodo o altro

1) Aggiorna Devise in modo che possa gestire Rails 4.0 aggiungendo questa linea al Gemfile dell’applicazione:

 gem 'devise', '3.0.0.rc' 

Quindi eseguire:

 $ bundle 

2) Aggiungi la vecchia funzionalità di attr_accessible nuovo alle guide 4.0

Prova ad usare attr_accessible e non commentarlo.

Aggiungi questa linea al Gemfile dell’applicazione:

 gem 'protected_attributes' 

Quindi eseguire:

 $ bundle 

Un aggiornamento per Rails 5:

 gem 'protected_attributes' 

non sembra più funzionare. Ma dai:

gem ‘protected_attributes_continued’

un tentativo.