Una stupidata ma


#1

Ho due tabelle in relazione uno a molti:
la prima:
def self.up
create_table :sectors do |t|
t.string :codice
t.text :descrizione
t.timestamps
end

la seconda:

def self.up
create_table :categories do |t|
t.references :sector
t.string :codice
t.text :descrizione
t.text :esempi

  t.timestamps
end
foreign_key(:categories, :sector_id, :sectors)

end

per le foreign keys ho creato un helper come aveva suggerito qualcuno
qui.
Ho creato gli scaffold per avere pronte le pagine per l’inserimento la
modifica e la visualizzazione dei dati.
Nella pagina per l’inserimento delle categorie ho anche un campo di
testo
dove devo va inserito l’id del settore a cui si riferisce la categoria.
Bene…inserisco il primo dato nella tabella settori, controllo e il
campo
sector_id ha come valore 1.
Vado ad inserire i dati nella tabella categories e nel campo settore ci
metto il valore 1.
Mi da un errore del tipo:
ActiveRecord::AssociationTypeMismatch in CategoriesController#create

Sector(#70182185518660) expected, got String(#70182230246400)

Mi sfugge qualcosa?


#2

2009/1/14 Mauro removed_email_address@domain.invalid

end

per le foreign keys ho creato un helper come aveva suggerito qualcuno qui.
Ho creato gli scaffold per avere pronte le pagine per l’inserimento la
modifica e la visualizzazione dei dati.
Nella pagina per l’inserimento delle categorie ho anche un campo di testo
dove devo va inserito l’id del settore a cui si riferisce la categoria.
Bene…inserisco il primo dato nella tabella settori, controllo e il campo
sector_id ha come valore 1.

mmh… se inserisci un record nella tabella sectors dovresti avere id = 1
non

sector_id = 1 :smiley:


#3

2009/1/15 Sandro P. removed_email_address@domain.invalid

end
campo
sector_id ha come valore 1.

mmh… se inserisci un record nella tabella sectors dovresti avere id = 1
non

sector_id = 1 :smiley:

si esatto id=1, ma non e’ questo l’origine del problema.


#4

Quando crei una nuova category devi fare o

category.sector = Sector.find( … )

o

category.sector_id = 1

Non puoi fare

category.sector = 1

perchè lui si aspetta (come ti dice) un settore e non una stringa (che poi
è
un intero)

Sandro

2009/1/15 Mauro removed_email_address@domain.invalid


#5

2009/1/15 Sandro P. removed_email_address@domain.invalid

category.sector = 1

perchè lui si aspetta (come ti dice) un settore e non una stringa (che poi
è
un intero)

mmmm e’ lo scaffondind che mi sta fuorivando?
Per la creazione dei modelli, controller e viste ho usato lo scaffonding
e
non ho aggiunto altro.


#6

ho trovato questo molto bello: http://scaffolding-ext.rubyforge.org/

2009/1/15 Sandro P. removed_email_address@domain.invalid


#7

non sò… controlla il codice dello scaffold e guarda se corrisponde


#8

2009/1/15 Mauro removed_email_address@domain.invalid:

Sector(#70182185518660) expected, got String(#70182230246400)

hai inserito tanti dati, ma non quelli essenziali, tipo il traceback.
dove avviene l’errore? nel controller? nel model?

cmq.

non sono iscritto alla ml da molto tempo, ma ti posso dire che in
genere tutti i messaggi vengono letti, e a tutti si cerca di dare
risposta. però non sempre si
può.
ad esempio, non so niente di helper sulle foreign keys, e non so mai
rispondere quando c’è di mezzo lo scaffolding, perché lo scaffolding
mi urta, non lo posso vedere. gusti.

altri che non hanno risposto avranno i loro motivi.

questo per dire che, in genere, rifare la domanda uguale senza
aggiungere nulla difficilmente aumenta le probabilità di risposta.

Bene…inserisco il primo dato nella tabella settori, controllo e il campo
sector_id ha come valore 1.

non ho capito. nella tabella sectors non c’è nessun campo sector_id,
semmai c’è un campo id, forse volevi dire quello?

aggiungi più dati, per favore.


#9

2009/1/15 Pietro G. removed_email_address@domain.invalid

risposta. però non sempre si può.

campo

sector_id ha come valore 1.

non ho capito. nella tabella sectors non c’è nessun campo sector_id,
semmai c’è un campo id, forse volevi dire quello?

aggiungi più dati, per favore.

Il traceback sarebbe?
io vedo: Application Trace http://localhost:3000/categories# |
Framework
Trace http://localhost:3000/categories# | Full
Tracehttp://localhost:3000/categories#
comunque il full trace e’:

/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/associations/association_proxy.rb:256:in
raise_on_type_mismatch' /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/associations/belongs_to_association.rb:22:inreplace’
/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/associations.rb:1276:in
sector=' /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2587:insend’
/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2587:in
attributes=' /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2583:ineach’
/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2583:in
attributes=' /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2283:ininitialize’
app/controllers/categories_controller.rb:43:in new' app/controllers/categories_controller.rb:43:increate’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in
send' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:inperform_action_without_filters’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in
call_filters' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:610:inperform_action_without_benchmark’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in
perform_action_without_rescue' /usr/lib/ruby/1.8/benchmark.rb:293:inmeasure’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in
perform_action_without_rescue' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/rescue.rb:136:inperform_action_without_caching’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:13:in
perform_action' /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:34:incache’
/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/query_cache.rb:8:in
cache' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:12:inperform_action’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in
send' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:inprocess_without_filters’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:606:in
process_without_session_management_support' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/session_management.rb:134:inprocess’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:392:in
process' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:183:inhandle_request’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:110:in
dispatch_unlocked' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:123:indispatch’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:122:in
synchronize' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:122:indispatch’
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:132:in
dispatch_cgi' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:39:indispatch’
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/webrick_server.rb:103:in
handle_dispatch' /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/webrick_server.rb:74:inservice’
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in service' /usr/lib/ruby/1.8/webrick/httpserver.rb:65:inrun’
/usr/lib/ruby/1.8/webrick/server.rb:173:in start_thread' /usr/lib/ruby/1.8/webrick/server.rb:162:instart’
/usr/lib/ruby/1.8/webrick/server.rb:162:in start_thread' /usr/lib/ruby/1.8/webrick/server.rb:95:instart’
/usr/lib/ruby/1.8/webrick/server.rb:92:in each' /usr/lib/ruby/1.8/webrick/server.rb:92:instart’
/usr/lib/ruby/1.8/webrick/server.rb:23:in start' /usr/lib/ruby/1.8/webrick/server.rb:82:instart’
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/webrick_server.rb:60:in
dispatch' /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/servers/webrick.rb:66 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:ingem_original_require’
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require' /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:inrequire’
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:521:in
new_constants_in' /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:inrequire’
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/server.rb:49
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in
gem_original_require' /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:inrequire’
script/server:3