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 %>
on 2009-06-05 17:19
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.
on 2009-06-06 12:05
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?
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>
on 2009-06-07 13:12
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.
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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.