Problemi con habtm


#1

Ciao a tutti sono un newbie di RoR e ho qualche problemino con due
tabelle DB2, collegate tra loro da una join table.

Tabella dtset:

-id (pk)
-name
-version

Tabella file_list:

-id (pk)
-name
-filename
-id_file_type

Tabella dtset_file (join table)
-id_dts
-id_file

Nel model dtset ho:

class Dtset < ActiveRecord::Base
set_table_name ‘dtset’
has_and_belongs_to_many :file_lists, :join_table => ‘dtset_file’,
:foreign_key => ‘id_dts’, :association_foreign_key => ‘id_file’

Nel model file_list ho:

class FileList < ActiveRecord::Base
set_table_name ‘file_list’
has_and_belongs_to_many :dtsets, :join_table => ‘dtset_file’,
:foreign_key => ‘id_file’, :association_foreign_key => ‘id_dts’

Io vorrei creare una pagina dove visualizzo tutti i file (della tabella
file_list) associata al dtset con id = 1. Inoltre i file devono avere
id_file_type = 0, 6, 5, 4, 3

Nel dtsets_controller ho creato un metodo:

def set_dtset
@dtset = Dtset.find(1)
@dtset.file_lists = FileList.find(:all, :conditions => {:id_file_type
=> [0, 6, 4, 5, 3]})
end

Nella view ho messo:

<%= @dtset.id %> <%= @dtset.name %>

<% for file_lists in @dtset.file_lists %>

<%=h file_lists.id %> <%=h file_lists.name%> <%=h file_lists.id_file_type%> <% end %>

Questo funziona, il mio problema è che nella join table, se è vuota, mi
inserisce tutti i file con id_file_type = 0, 6, 5, 4, 3 e li associa a
id_dts = 1.
Questo è il log dell’applicazione:

SELECT * FROM dtset WHERE (dtset.id = 1)
SELECT * FROM file_list WHERE (file_list.id_file_type IN (0,6,4,5,3))
SELECT * FROM file_list INNER JOIN dtset_file ON file_list.id =
dtset_file.id_file WHERE (dtset_file.id_dts = 1 )
INSERT INTO dtset_file (id_file, description, id_dts) VALUES (64, NULL,
1)
INSERT INTO dtset_file (id_file, description, id_dts) VALUES (3, NULL,
1)

Per capirci non vorrei che facesse le operazioni di insert.

Spero di essere stato comprensibile, scusate la lunghezza della mail ma
non sapevo come spiegarmi in maniera più breve.

Un Saluto