Forum: Italian Ruby user group associazione molti a molti - salvataggio tabella intermedia

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
1511760251a502fd040fc1e2a7453649?d=identicon&s=25 Marco Mueller (marco_m)
on 2009-06-05 17:19
Ciao a tutti,
sto realizzando il mio primo progetto con Rails e 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) con la tabella 'discteaches', sto usando
l'associazione has_many-through perche'
has_and_belongs_to many mi dava ancora più problemi.
Sto gestendo l'INSERIMENTO DI UN NUOVO INSEGNANTE (nella vista scelgo la
materia con un menu a discesa), non so bene come salvare nella tabella
intermedia 'discteaches' l'id dell'insegnante e quello della disciplina
... quando voglio salvare Rails mi da' "undefined variable or method
teacher..."
e non salva niente.

Qualcuno ha la pazienza di darci un'occhiata? ;-)

  MODEL

in teacher.rb ho scritto:
  has_many :disciplines, :through => :discteaches
in discipline.rb ho scritto:
  has_many :teachers, :through => :discteaches
in discteach.rb ho scritto:
  belongs_to teacher
    belongs_to discipline

  CONTROLLER (teachers_controller)

def create
    @teacher = Teacher.new(params[:teacher])
    @discteach = Discteach.new
    @discteach.discipline_id = params[:discipline.id]
    @discteach.teacher_id = @teacher.id
    @teacher.save
    @discteach.save
    if @teacher.save && @discteach.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


  VISTA (teachers\new.html.erb)

<%= error_messages_for 'teacher' %>
<h1>Inserimento nuovi insegnanti:</h1>
<% form_for @teacher do |f| %>
<p>
  cognome: <%= f.text_field :cognome %>
</p>
<p>
  nome:  <%= f.text_field :nome %>
</p>
<p>
  materia:
  <select name="materia">
    <% for discipline in @discipline %>
    <option value= "<%= discipline.id %>" <b><%= discipline.descrizione
%></b>
    </option>
  <% end %>
  </select>
</p>
<p>
  <%= submit_tag "Salva insegnante" %>
</p>
<% end %>
9538e63be1a8261e6c0e028db161a366?d=identicon&s=25 Andrea Longhi (andrea)
on 2009-06-06 11:36
Marco Mueller wrote:

> in teacher.rb ho scritto:
>   has_many :disciplines, :through => :discteaches
> in discipline.rb ho scritto:
>   has_many :teachers, :through => :discteaches

Allora, in entrambi manca
has_many :discteaches

> def create
>     @teacher = Teacher.new(params[:teacher])
>     @discteach = Discteach.new
>     @discteach.discipline_id = params[:discipline.id]
                                       ^^^^^^^^^^^^^^^^
params[:discipline.id] è nil, se nella vista usi <select name="materia">
qui dovrai usare params[:materia]

>     @discteach.teacher_id = @teacher.id
qui @teacher.id è nil, essendo @teacher un nuovo record non ancora
salvato id è nil. Prima devi salvare @teacher, poi assegnare
@discteach.teacher_id

Un appunto stilistico: secondo me è orribile mischiare italiano e
inglese nel codice: leggere robe tipo teacher.cognome o
discipline.descrizione fa venire l'orticaria e manca di consistenza, se
il tuo problema è avere i nomi dei campi in italiano nelle viste ti
consiglio di usare la localizzazione di rails che funziona benissimo
anche per queste cose.

Ultima nota: ci sono un paio di screencast sulle relazioni has_many e
has_many through su railscasts.com, ti consiglio di guardarli per vedere
come migliorare il codice del controller e delle viste.
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2009-06-06 12:05
(Received via mailing list)
2009/6/6 Andrea Longhi <andrea74@mailshack.com>:
> Un appunto stilistico: secondo me è orribile mischiare italiano e
> inglese nel codice: leggere robe tipo teacher.cognome o
> discipline.descrizione fa venire l'orticaria e manca di consistenza, se
> il tuo problema è avere i nomi dei campi in italiano nelle viste ti
> consiglio di usare la localizzazione di rails che funziona benissimo
> anche per queste cose.
>

Ti riferisci a gettext per la localizzazione?
9538e63be1a8261e6c0e028db161a366?d=identicon&s=25 Andrea Longhi (andrea)
on 2009-06-06 16:29
Msan Msan wrote:
> Ti riferisci a gettext per la localizzazione?

No, alla internazionalizzazione di rails con i file .YML in
config/locales e il metodo I18n.translate... qui trovi un esempio per la
parte relativa ad activerecord:
<http://iain.nl/2008/09/translating-activerecord>
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2009-06-07 13:12
(Received via mailing list)
2009/6/6 Andrea Longhi <andrea74@mailshack.com>:
> Msan Msan wrote:
>> Ti riferisci a gettext per la localizzazione?
>
> No, alla internazionalizzazione di rails con i file .YML in
> config/locales e il metodo I18n.translate... qui trovi un esempio per la
> parte relativa ad activerecord:
> <http://iain.nl/2008/09/translating-activerecord>

Avevo sottovalutato la localizzazione e l'internazionalizzazione nelle
mie apps.
Ho visto che esiste un plugin, globalize,
http://github.com/joshmh/globalize2/tree/master.
1511760251a502fd040fc1e2a7453649?d=identicon&s=25 Marco Mueller (marco_m)
on 2009-06-07 14:55
Andrea Longhi wrote:
> Marco Mueller wrote:
>

Grazie mille Andrea!!!
sto imparando molto in qs giorni... e l'applicativo comincia
a prendere forma!
Marco
This topic is locked and can not be replied to.