Bonjour,
cela fait depuis peu que j'ai repris RoR et je me suis lancé dans un petit projet perso pour voir ce que je savais encore faire. Ca va j'ai pas tout perdu mais je rencontre un petit probleme.

Je voudrais assigner plusieurs utilisateurs à une seul tâche vue que je n'arrivais pas à ajouter un tableau d'ids, j'ai cherché une méthode et j'ai trouvé qu'un join table peu faire l'affaire.

J'ai donc fais ça :
  1. rails g model TasksUsers pour créé le model
  2. dans ma migration t.task_id, :integer t.user_id, :integer et rake db:migrate ( pas de soucis la table avec les colonnes sont bien la)
  3. J'ai ajouté les has_many et belongs_to comme suit :
    class TasksUsers < ActiveRecord::Base
    belongs_to :user
    belongs_to :task
    end
    class Task < ActiveRecord::Base
    has_many :users , :through => :tasks_users
    has_many :tasks_users
    end
    class User < ActiveRecord::Base
    has_many :tasks, :through => :tasks_users
    has_many :tasks_users   
    end
  4. C'est la que ca coince un peu. Je me retrouve dans mon formulaire avec un select multiple à true et je ne sais pas comment ajouter les valeurs dans le join table, j'ai ca mais il me manque les noms des colonnes :
    = f.input :(la ?) do
    = f.collection_select :(la ?), User.all, :id, :username, {}, {:multiple => true, "data-placeholder" => "Users"}

Meric, des bisous.

5 réponses


Amstramgram
Auteur
Réponse acceptée

Bon apres quelques (beaucoup de) recherche/lecture de tutos et de posts. J'ai trouvé.

Ajouter cette ligne params.require(:task).permit( user_ids:[] )
et mettre has_and_belongs_to_many :tasks, dependent: :destroy et has_and_belongs_to_many :users, dependent: :destroy

Merci.

Tu veux un select qui sélectionne quoi ?

J'aimerais un select qui liste les utilisateurs, et qu'on puisse selectionner un ou plusieur utilisateur(s).

Tu peux build le select toi même.

= f.input :user_id, collection: User.pluck(:id, :name)

Le réel probleme ce n'est pas la construction du select, c'est plus comment sauvegarder les valeurs task_id <-> user_id dans la join table tasks_users par rapport au select :user_ids.