Ho prevenire aggiornamenti di alcuni modelli utilizzando questo nel modello:Come posso non consentire gli aggiornamenti tranne per un campo?
def update
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
ora sto scrivendo un plugin che fornisce alcune funzionalità in più per il modello, e ho bisogno di aggiornare un campo in modello. Se non fossi utilizzando un plugin Vorrei farlo direttamente nel modello ...
def update
if self.changed == ['my_field']
super
else
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
end
non posso fare lo stesso dal mio plug-in quanto non so se il comportamento di aggiornamento è il default ActiveRecord , o è stato sovrascritto per impedire aggiornamenti. C'è un altro modo per prevenire gli aggiornamenti dei record mentre mi consente di eseguire l'override per un campo specifico (e solo nell'istanza in cui il mio plugin è applicato a questo modello).
Grazie. Mi sono reso conto che anche i modelli che richiedono la mia logica prevent_update sono quelli che richiedono il plug-in, quindi ho spostato l'intero lotto nel plug-in, utilizzando un filtro before_update come suggerisci. – Nick
In rails 3. *, aggiungere l'errore tramite 'self.errors.add: base," Can not update ... "' – ronen
Penso che probabilmente si voglia che la clausola if sia restituita true se self.changed | self. updatabale_attributes == self.updatabale_attributes' in modo da poter aggiornare anche un sottoinsieme degli updatable_attributes. – Timo