2009-09-25 4 views
9

Je ressens le besoin de m'excuser pour avoir posé une question aussi simpliste, mais je suis de plus en plus frustré par les guides Rails. Je suis sûr qu'ils répondent à ma question, mais ils ne fournissent pas assez de contexte pour que je comprenne vraiment comment appliquer ce qu'ils me donnent. Google n'est pas non plus d'une grande aide, bien que je sois juste en train de rechercher les mauvais termes/expressions. Compte tenu de cet avertissement, je vais juste aller de l'avant et de demander:Remplir une sélection avec les données du modèle dans les rails

J'ai un Image que HABTM Album. Pour soutenir cela, j'ai une table albums_images avec des champs image_id et album_id (pas d'autres). Pour la vie de moi, je ne peux pas comprendre comment remplir mon formulaire d'image partielle afin que l'utilisateur puisse sélectionner les albums auxquels une image nouvellement téléchargée devrait appartenir. Je suis en train d'apprendre les Rails, donc je veux juste les bases. Je suis sûr qu'il existe des plugins de fantaisie pour faire cela de cent façons, mais je voudrais apprendre les bases en premier et construire à partir de là. Ma forme partielle est à peu près manuel:

<% form_for(@image, :html => { :multipart => true }) do |f| %> 
    # All the basics you'd expect to see. 
<% end %> 

Ma dernière tentative ne fonctionne pas mieux que toute autre variation que je l'ai essayé, mais il ressemble à ceci:

<p> 
    <%= f.label :album_id %> 
    <%= f.select(:album_id, current_user.albums, :id, :name) -%> 
</p> 

Encore une fois, je Reconnaître la simplicité de la question que je pose et j'ai lu ce que je peux trouver, mais je n'ai pas été capable de le mettre ensemble dans une solution complète. Il semble y avoir plusieurs façons de le faire, mais pas vraiment de discussion sur chacun d'entre eux, leurs avantages/inconvénients ou comment les utiliser réellement dans un contexte plus large.

Merci.

MISE À JOUR: Un couple de clés à noter et une correction de code. Premièrement, il existe une relation HABTM entre les images et les albums. Aucune table de modèle n'a de FK référençant directement l'autre. Deuxièmement, la collection de l'album doit être accessible en tant que current_user.albums (corrigé ci-dessus). Un utilisateur has_many albums et un album belongs_to utilisateur.

MISE À JOUR: À la demande de theIV ci-dessous, pour le moment, avec ce code:

22: <p> 
23: <%= f.label :album_id %> 
24: <%= f.select(:album_id, current_user.albums.collect {|a| [a.name, a.id]}) -%> 
25: </p> 

je reçois cette erreur:

undefined method `album_id' for #<Image:0x1042ec110> 

Je reçois l'erreur dans la ligne 24.

+0

Pourriez-vous expliquer quel type d'erreur vous obtenez? Ou, publiez une partie de la sortie de votre journal de développement? – theIV

+0

C'est la chose, les erreurs sont partout en fonction de la variation que j'utilise. Souvent, cependant, il y a eu une sorte d'erreur de fusion ou une erreur de méthode manquante pour "album_id". À l'heure actuelle, avec ce code: 22: \t

23: \t \t <% = f.label: album_id%> 24: \t \t <% = f.select (: album_id, current_user.albums.collect { | a | [a.name, a.id]}) -%> 25: \t

Je reçois cette erreur: méthode non définie album_id » pour # J'espère que cela aide. C'est beaucoup plus frustrant que ce à quoi je m'attendais. –

+0

Désolé, j'ai supposé que les commentaires autoriseraient les blocs de code. Je vais ajouter une mise à jour à la publication originale. –

Répondre

6

Eh bien, je ne suis pas sûr que c'est la meilleure façon, la manière Rails ou, franchement, même d'une manière élégante, mais voici le code que je l'ai utilisé qui semble être travaille jusqu'à présent.

<%= f.label 'Albums' -%> 
<%= collection_select(:image, :album_ids, current_user.albums, :id, :name, {}, { :multiple => true }) -%> 

A ce moment, quand je dis « travail », tout ce que je peux vraiment témoigner est que la page rend sans erreur et l'album ou des albums appropriés sont sélectionnés quand je modifier une image. Je suis encore choqué de voir à quel point il était difficile de concocter une solution «complète» à partir de nombreuses sources disparates.

15

Je pense que select éléments sont l'un des aspects les plus confus de Rails, parce que comme vous l'avez dit, il semble y avoir un certain nombre de façons de le faire.

Essayez ceci:

<%= f.select(:album_id, @image.albums.all.collect {|a| [a.name, a.id]}) -%> 
+0

J'ai corrigé/souligné quelques points concernant ma structure, mais cela n'a pas fonctionné pour moi. Peut-être en raison de changements que j'ai dû faire b/c J'ai eu quelques mauvaises infos ci-dessus. Ce que j'ai maintenant est '<% ​​= f.select (: album_id, current_user.albums.collect {| a | [un.nom, a.id]}) -%>'. J'ai également essayé avec le '.all' named_scope. –

Questions connexes