2011-03-11 3 views
16

Voglio solo essere chiaro su quale sia l'assegnazione di massa e su come codificarla. È assegnazione di massa l'assegnazione di molti campi usando un hash, cioè come ..Definizione delle assegnazioni di massa delle rotaie e uso attr_accessible

@user = User.new(params[:user]) 

E per evitare che questo si utilizza attr_accessible come:

attr_accessible :name, :email 

In modo che un campo come: admin non potrebbe essere aggiunto dall'assegnazione di massa?

Ma possiamo modificare nel codice da qualcosa come:

@user.admin = true 

Quindi è vero che se non abbiamo attr_accessible allora tutto è accessibile per l'assegnazione di massa?

E, infine, il punto delicato ... è vero che anche con una sola attr_accessible come "attr_accessible: nome" significa che tutti i altri campi sono ora non accessibili per l'assegnazione di massa?

risposta

11

Tutte le ipotesi sono corrette. Senza attr_accessible, tutti i campi sono aperti all'assegnazione di massa. Se inizi a utilizzare attr_accessible, solo i campi specificati sono aperti all'assegnazione di massa.

5

Come sottolineato da Srdjan tutte le ipotesi sono corrette. Solo per quello che sai, esiste anche un metodo attr_protected che è l'opposto di attr_accessible.

In altre parole

attr_protected :admin 

impedirà: admin dall'essere mass-assegnato, ma permetterà tutti gli altri campi.

2

La risposta di Srdjan è corretta presupponendo che config.active_record.whitelist_attributes sia impostato su nel config/application.rb.

Se è impostato su true, tutti gli attributi saranno protetti dalla cessione di massa per default a meno che non viene utilizzato attr_accessible o attr_protected.