# Multiselect and many to many

**URL:** <https://www.ruby-forum.com/t/multiselect-and-many-to-many/142691>\
**Category:** IT\
**Created:** [July 10, 2008, 12:17pm UTC](https://www.ruby-forum.com/t/multiselect-and-many-to-many/142691 "2008-07-10T12:17:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![enrico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/e495f1/32.png) [@enrico](https://www.ruby-forum.com/u/enrico)\
**Post date:** [July 10, 2008, 12:17pm UTC](https://www.ruby-forum.com/t/multiselect-and-many-to-many/142691/1 "2008-07-10T12:17:44Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![enrico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/e495f1/32.png) [@enrico](https://www.ruby-forum.com/u/enrico)\
**Post date:** [July 10, 2008, 12:50pm UTC](https://www.ruby-forum.com/t/multiselect-and-many-to-many/142691/2 "2008-07-10T12:50:45Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![enrico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/e495f1/32.png) [@enrico](https://www.ruby-forum.com/u/enrico)\
**Post date:** [July 10, 2008, 1:03pm UTC](https://www.ruby-forum.com/t/multiselect-and-many-to-many/142691/3 "2008-07-10T13:03:41Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
