svergeylen / collector

Collector : site de gestion des BD, films, DVD, jeux de société, ...
2 stars 0 forks source link

Association de parent_tags stochastique #91

Closed svergeylen closed 6 years ago

svergeylen commented 6 years ago

Coucou, L'association de parent_tags me semble un peu hasardeuse... pourrais-tu vérifier que tout fonctionne bien ?

Tout cela fait un peu désordre et tu pourrais surement me donner quelques conseils pour que je gagne un peu de temps avec ces brols, vu que tu aimes bien les associations et que tu en fais plus souvent que moi (éventuellement checker les nested attributes etc que je n'ai pas encore exploité) ;-)

Idéalement, relire le modèle tag et item ne serait pas du luxe pour qu'ils soient finalisés ;-)

Merci

dvergeylen commented 6 years ago

Tu perds l'ensemble parce que tu n'as pas permit cet attribut dans le controleur:

https://github.com/svergeylen/collector/blob/6c4f6d27b9117f25c054c74930db8cbd82de5b1b/app/controllers/items_controller.rb#L130-L133

Du coup, item_params appelé dans update filtre les éléments dans params, qui est ensuite ré-utilisé par le render edit → il n'y sont plus.

Tu le dis toi-même, Rails te renvoie unpermitted parameters https://github.com/svergeylen/collector/blob/6c4f6d27b9117f25c054c74930db8cbd82de5b1b/app/models/item.rb#L33

Dans app/controllers/items_controller.rb > item_params, ajoute les tags:

def item_params
      params.require(:item).permit(:number, :name, :description, :attachments; tag_attributes: [:id, :name, etc])
end

Si tu as une erreur de syntaxe, il est possible que tu doives mettre {tag_attributes: [:id, :name, etc]}

svergeylen commented 6 years ago

ok, c'est l'info que je cherchais... mais j'ai jamais trouvé la doc sur ce concept pour pouvoir le maitriser... (il faillait y penser que c'était _attributes suivi d'un array de sous attributs ! ;-) ) ;-) merci

dvergeylen commented 6 years ago

C'est vrai que c'est un peu caché dans la doc, c'est parce qu'ils en ont beaucoup parlé lors de la sortie de Rails 4.2 qui introduisait la feature :wink:

Content que ça marche

dvergeylen commented 6 years ago

N.B : Ça marche aussi en nested:

params.require(:item).permit(post_attributes[:title, comments_attributes: [:content]])

Bien pratique quand tu as des accepts_nested_attributes_for en cascade!

svergeylen commented 6 years ago

non, marche po :-(

svergeylen commented 6 years ago

Unpermitted parameter: :tag_ids

svergeylen commented 6 years ago

je n'essaie pas de modifier un tag via un item, pourtant, j'essaie simplement d'associer un tag à un item... le truc qui marchait depuis toujours mais, là, plus rien... étonnant. je vais comparer avec le source d'avant...

En console, ceci fonctionne : i.tag_ids = [1] mais pas dans l'application...

dvergeylen commented 6 years ago

Ah, dans ce cas la syntaxe est plutôt:

params.require(:item).permit(:number, :name, :description, :attachments, tag_ids: [])

EDIT: Il est possible que tu doives ajouter des accolades comme ceci:

params.require(:item).permit(:number, :name, :description, :attachments, {tag_ids: []})
svergeylen commented 6 years ago

oui ! le premier semble fonctionner :-) dur dur la syntaxe ;-) (pq des crochets d'array [] après le nom ? Moi, j'avais essayé plein de fois sans les crochets ) enfin soit... ;-)

A priori closed, merci ! :-) mais je garde le ticket ouvert jusqu'à ce que j'ai tout testé :-)

dvergeylen commented 6 years ago

pq des crochets d'array [] après le nom ?

Parce que c'est une association multiple et nom un champ de l'objet :wink: