Multiselect and many to many

Ciao a tutti!
Sto facendo qualche test per la creazione di un semplice slide show.
La situazione è questa:
Ho 3 tabelle:

  • slide_pictures (titolo e indirizzo dell’immagine)
  • slide_shows (sequenza di immagini)
  • slide_pictures_slide_shows

I due modelli - slide_picture e slide_show - sono legati dalla relazione
many to many e sono stati generati tramite scaffold.

Ho modificato le action create e update di slide_show per permettere il
salvataggio delle pictures abbinate con questo codice:

def create
@slide_show =
current_user.client.slide_shows.build(params[:slide_show])
@slide_show.slide_pictures =
current_user.client.slide_pictures.find(params[:slide_picture_ids])

respond_to do |format|
  if @slide_show.save
  .....

e nelle viste new ed edit ho inserito questo codice che mi mostra tutte
le picture disponibili:

Slide Pictures
<%= select_tag("slide_picture_ids[]", options_for_select(current_user.client.slide_pictures.collect { |slide| [slide.title, slide.id] }, @slide_show.slide_pictures.collect { |slide| slide.id}), {:multiple=>true, :size=>10})%>

Funziona tutto correttamente quando visualizzo le viste, mentre quando
cerco di salvare i dati mi ritorna questo errore:

Mysql::Error: #23000Duplicate entry ‘1’ for key 1: INSERT INTO
slide_pictures_slide_shows (id, slide_show_id, slide_picture_id)
VALUES (1, 2, 1)

Questo perchè cerca di inserire un record con id 1 quando esiste già .
Praticamente facendo un pò di prove ho notato che cerca di inserire un
record con lo stesso id della slide_picture.

Avete qualche consiglio?
E’ corretto dal punto di vista logico la mia implementazione?

Nella migration di creazione di slide_pictures_slide_shows dovresti
impostare a “false” la creazione (automatica) della primary key “id”.
Una cosa del tipo:
create table :slide_pictures_slide_shows, :id => false do |t|

end

2008/7/10 Enrico B. [email protected]:

E’ corretto che inserisca in automatico (auto-increment) l’id di
:slide_pictures_slide_shows.

Il problema è che io vorrei che la vista non passasse questo id in modo
tale che il db lo crei lui in automatico con l’auto-increment.

Carlo P. wrote:

Nella migration di creazione di slide_pictures_slide_shows dovresti
impostare a “false” la creazione (automatica) della primary key “id”.
Una cosa del tipo:
create table :slide_pictures_slide_shows, :id => false do |t|

end

2008/7/10 Enrico B. [email protected]:

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs