2012-12-06 4 views
1

J'ai une situation où un attribut peut être créé via une API JSON. Mais une fois qu'il est créé, je veux l'empêcher d'être mis à jour. Cette contrainte provoque l'insuffisance de ma première solution, qui utilise attr_accessible. Existe-t-il une bonne façon de gérer ce type de situation dans les rails, ou dois-je effectuer une vérification manuelle dans la méthode update?Dans Rails, comment limiter les attributs pouvant être mis à jour sans les empêcher d'être créés?

Répondre

3

Vous pouvez utiliser attr_readonly, cela permettra à la valeur à régler sur la création, mais ignoré à la mise à jour.

Exemple:

class User < ActiveRecord::Base 
    attr_accessible :name 
    attr_readonly :name 
end 


> User.create(name: "lorem") 
> u = User.first 
=> #<User id: 1, name: "lorem"> 
> u.name = "ipsum" 
=> "ipsum" 
> u.save 
=> true 
> User.first.name 
=> "lorem" 
+0

Merci! Je savais qu'il devait y avoir un moyen facile :) –

0

Il n'y a pas une belle façon de le faire pour autant que je sache, vous devez écrire un filtre personnalisé

before_update :prevent_attributes_update 

def prevent_attribute_updates 
    %w(attr1, attr2).each do |a| 
    send("#{attr1}=", send("#{attr1}_was")) unless self.send("#{attr1}_was").blank? 
    end 
end 
Questions connexes