2017-10-07 1 views
0

J'ai un séjour qui has_many_and_belongs_to :rooms. Les chambres sont créées par l'administrateur, elles ne sont donc pas créées avec Séjours, donc j'aimerais pouvoir sélectionner les pièces d'une collection donnée, mais je voudrais créer une sélection personnalisée en utilisant simple_fields_for.Rails personnalisés sélectionner avec partielle pour la collection

Le code que j'ai sous ma forme partielle afin d'obtenir ce que je veux:

= f.simple_fields_for :rooms, Room.available do |rf| 
= render 'reservations/form/resource', f: rf 

Ma ressource partielle n'a jusqu'à présent qu'une seule ligne: = f.hidden_field :id, value: f.object.id

Et quand j'actualisez je reçois:

undefined method `id' for #<Room::ActiveRecord_Relation:0x007feb6f3fc2f0> 
Did you mean? ids 

mais quand j'essaie ids je reçois une seule entrée cachée qui a ce code: <input value="1 2 3 4 5 6 7 8 9" type="hidden" name="reservation_stay[rooms][id]" id="reservation_stay_rooms_id">

Comment puis-je le faire créer une entrée pour chaque pièce?

Répondre

0

Une idée fausse est que fields_for (ou le SimpleForm enveloppé simple_fields_for) doit être utilisé lors de l'attribution des associations (reliant les enregistrements ensemble) - il est pertinent que si vous utilisez accepts_nested_attributes pour créer ou mettre à jour des ressources imbriquées dans la même forme.

Lors de l'affectation d'associations à une collection dans Rails, vous transmettez un paramètre _ids (rooms_ids) à un tableau.

Par exemple:

Stay.first.update(room_ids: [1, 2, 3]) 

Le poseur _ids crée ou supprime automatiquement les associations - même si elles sont indirectes. Il s'agit de la form options helpers in Rails work.

<%= f.collection_select :rooms_ids, Room.available, :id, :room_number %> 

La meilleure façon d'obtenir les params correctes avec une interface utilisateur personnalisée est d'utiliser en fait une sélection et le cacher au lieu d'utiliser une entrée cachée.

+0

Merci pour votre réponse maintenant je comprends, mais j'ai une question connexe. Que se passe-t-il si je veux changer le statut de la pièce lorsqu'elle est liée à Stay? – Gregg

+0

Vous devez repenser comment vous avez modélisé ceci. Si vous changez l'état de la table des chambres lors de la création d'une réservation, cela verrouillera la salle même si la réservation est prévue un mois plus tard. Au lieu de cela, vous voulez utiliser 'has_many: through' et stocker les dates d'une réservation dans la table de jointure. Je voudrais le configurer comme Réservation a_many Réservations. La réservation appartient à la chambre. mais c'est vraiment une question séparée. – max

+0

Il y a probablement beaucoup d'exemples d'application de réservation de rails si vous cherchez un peu. – max