Cela devrait être facile. Je ne sais pas exactement comment titre la question si. J'ai une collection de modules qui peuvent être ajoutés à mon CMS (page, lien, formulaire ...) ils sont tous associés via une association polymorphe à une table qui gère des choses communes comme l'ascendance et si elles sont activées etc. Parce que je crée une "page" par exemple, je gère automatiquement la création de cet autre enregistrement de table. Tout ce que j'ai besoin de lui transmettre est le parent_id. Pour ce faire, je l'ai créé une procuration par le modèle de page:Comment stocker un ID dans une classe de modèle
def parent_id=(parent_id)
@parent_id = parent_id.blank? ? nil : parent_id.to_i
component_instance.parent_id = @parent_id
end
def parent_id
@parent_id ||= component_instance.parent_id
end
component_instance est l'association polymorphique.
Vous pouvez voir que lorsque le parent_id est défini sur la page, je fais un peu de magie pour voir s'il est vide et si oui, définissez la valeur @parent_id à zéro, sinon je le transforme en entier, puis Assignez-le à l'instance component_instance qui l'appliquera si nécessaire lorsque l'ensemble de la combo page/component_instance est enregistré dans la base de données.
J'ai dû faire la chose blank? nil : parent_id.to_i
parce que l'assistant de sélection de formulaire attend un nombre entier et ne fonctionne pas avec une valeur de chaîne pour l'ID. La question est, est-ce que je le fais de la bonne façon, ou y a-t-il un meilleur moyen de transformer un identifiant de chaîne en un nil ou un entier selon qu'il existe ou pas?
Pourquoi votre parent_id serait-il une chaîne? Quelque chose ne s'ajoute pas ici. – jdl
Parce que ça vient du hash des params. Tout dans params est passé comme une chaîne n'est-ce pas? –