Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28

    has_and_belongs_to many

    Ciao,
    sto gestendo una relazione molti a molti tra la tabella 'disciplines'
    e la tabella 'teachers' (una materia e' insegnata da molti professori e un
    professore puo' insegnare più materie).
    In teacher.rb ho scritto:
    has_and_belongs_to_many :disciplines
    in discipline.rb ho scritto:
    has_and_belongs_to_many :teachers
    Ho letto che gli automatismi di ActiveRecord portano a gestire una tabella
    di join di nome 'disciplines_teachers' che contiene solo le chiavi esterne
    teacher_id e discipline_id e che non è necessario crearne il model.

    Domanda: quando inserisco un nuovo insegnante come faccio a salvare i dati anche in disciplines_teachers?
    Se Rails lo fa da solo (?) dov'e' la tabella? (uso POSTGRESQL e la tabella
    disciplines_teachers non e' stata creata, non c'e'...)

    Grazie
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  2. #2
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263

    Re: has_and_belongs_to many

    Originariamente inviato da marco_m
    quando inserisco un nuovo insegnante come faccio a salvare i dati anche in disciplines_teachers?
    Se Rails lo fa da solo (?)
    Si, fa tutto da solo

    dov'e' la tabella? (uso POSTGRESQL e la tabella
    disciplines_teachers non e' stata creata, non c'e'...)
    Devi crearla tu

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    Grazie mille Toraz!

    Ancora però non ci sono...
    Siccome non sono pratico di Postgresql uso PgAdminIII: ho creato
    la tabella 'disciplines_teachers' coi 2 campi chiave esterna e non ho
    creato alcun campo chiave primaria ma ho selezionato OID.

    Ho inserito un nuovo insegnante e ancora niente...

    Quando inserisco un nuovo insegnante con la view digito il nome ed il cognome
    (i 2 campi di 'teachers') e seleziono da un menu a tendina la materia,
    dato che quindi non va in un campo di teachers... come fa Rails a sapere
    come riempire i campi di disciplines_teachers?
    Devo io creare un nuovo oggetto di discipline_teachers e poi salvarlo?
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  4. #4
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da marco_m
    Ancora però non ci sono...
    Siccome non sono pratico di Postgresql uso PgAdminIII: ho creato
    la tabella 'disciplines_teachers' coi 2 campi chiave esterna e non ho
    creato alcun campo chiave primaria ma ho selezionato OID.
    La cosa più saggia sarebbe creare la tabella tramite una migration
    codice:
    ...
    def self.up
      create_table :disciplines_teachers, :id => false do |t|
        t.references :discipline
        t.references :teacher
      end
    end
    ...
    Così Rails se la sbriga da solo quale che sia il database che stai usando.

    Ho inserito un nuovo insegnante e ancora niente...
    Cioè? Niente cosa?

    Quando inserisco un nuovo insegnante con la view digito il nome ed il cognome
    (i 2 campi di 'teachers') e seleziono da un menu a tendina la materia,
    dato che quindi non va in un campo di teachers... come fa Rails a sapere
    come riempire i campi di disciplines_teachers?
    Boh? Com'è fatta la view? E il controller?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    nel controller di teacher ho le seguenti righe (salvo nell'oggetto @teacher tutto quello
    che c'è in params...)

    def create
    @teacher = Teacher.new(params[:teacher])
    @teacher.save
    if @teacher.save
    flash[:notice] = 'Form memorizzato!'
    redirect_to teachers_path
    else
    render :action => 'new'
    end
    end

    def new
    if session[:user_id]
    @current_user = User.find_by_id(session[:user_id])
    end
    @discipline = Discipline.find(:all)
    @teacher = Teacher.new
    end

    nella vista new di teacher ho:

    <%= error_messages_for 'teacher' %>
    <h1>Inserimento nuovi insegnanti:</h1>
    <% form_for @teacher do |f| %>



    cognome: <%= f.text_field :cognome %>
    </p>



    nome: <%= f.text_field :nome %>
    </p>



    materia:
    <select name="materia">
    <% for discipline in @discipline %>
    <option value= "<%=h discipline.id %>" <%=h discipline.descrizione %>
    </option>
    <% end %>
    </select>
    </p>



    <%= submit_tag "Salva insegnante" %>
    </p>
    <% end %>

    devo salvare il dato selezionato nella option (che non è di teacher)...

    Grazie
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  6. #6
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da marco_m
    <select name="materia">
    <% for discipline in @discipline %>
    <option value= "<%=h discipline.id %>" <%=h discipline.descrizione %></option>
    <% end %>
    </select>
    Così non funziona di sicuro. L'hash params che ne viene fuori è fatto tipo
    codice:
    { :none => "foo", :cognome => "bar", :materia => "1" }
    tu ce l'hai un metodo "materia" nel modello Teacher che sappia che farsene di un identificatore del genere? Se si sei a posto, se no devi definirlo. Oppure potrebbe anche esserci qualche altra soluzione migliore al problema, ma francamente non mi viene in mente niente.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    Grazie tante Toraz...

    Mi sembrava normale questo params...
    comunque (dopo molte ore) ho capito che il select non era una buona soluzione perche' ti permette di selezionare una sola materia... Ho pensato allora ai check_box, sono tornato alle relazioni has_and_belongs_to, ho trovato su railscast un video che faceva al caso mio
    e adesso... FUNZIONA!

    Grazie ancora, buone cose!
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  8. #8
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da marco_m
    railscast un video che faceva al caso mio
    Posti il link?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    ... certo, eccolo qua:

    http://railscasts.com/episodes/17
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  10. #10
    ho capito che il select non era una buona soluzione perche' ti permette di selezionare una sola materia...
    I select possono anche essere configurati per accettare più selezioni.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.