Forum: Italian Ruby user group Problemi con habtm

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.
Fabrizio T. (Guest)
on 2007-07-30 17:57
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:

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

<% for file_lists in @dtset.file_lists %>
 <tr>
   <td><%=h file_lists.id %><td>
   <td><%=h file_lists.name%></td>
   <td><%=h file_lists.id_file_type%></td>
</tr>
<% 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
This topic is locked and can not be replied to.