Ayuda con select_tag!


#1

Hola a todos!

Les comento que tengo el siguiente problema, estoy intentando hacer un
select_tag en un form (Albums) donde tengo una cantidad de objetos para
seleccionar (Artistas). Cada uno de esos objetos tiene su id y tabla
relacionada,sin embargo puse una de los opciones donde dice “Selecciona
un artista”, por lo tanto no es un “Artista” ni tiene una id “valida”.
Cuando quiero crear un album y dejo seleccionado en la parte de
Artistas la opcion de “Selecciona un artista” me salta un error ya que
"no puede encontrar un artista con esa id ".

No se como validar para que no intente hacer se find cuando tiene el
valor que se le asigna cuando se selecciona la opcion de “selecciona un
artista”.

Dejo el codigo del “new.html.erb” y del controlador. Por favor denme una
mano!

Gracias!!

new.html.erb

New album

<%= error_messages_for :album %>

<% form_for(@album) do |f| %>

Title
<%= f.text_field :title %>

Artist
<%=select_tag('artist_id',options_for_select([["Select One",0]] + @artist.collect {|art| [art.name,art.id]},@album.artist_id ))%>

Release date
<%= f.datetime_select :release_date %>

Genre
<%= f.text_field :genre %>

Created at
<%= f.datetime_select :created_at %>

Updated at
<%= f.datetime_select :updated_at %>

Feature
<%= f.text_field :feature %>

Image path
<%= f.text_field :image_path %>

<%= f.submit "Create" %>

<% end %>

<%= link_to ‘Back’, albums_path %>

albums_controller.rb

def create
artist = Artist.find(params[:artist_id])
@album = Album.new(params[:album])

@album.artist = artist

respond_to do |format|
  if   @album.save
    flash[:notice] = 'Album was successfully created.'
    format.html { redirect_to(@album) }
    format.xml  { render :xml => @album, :status => :created,

:location => @album }
else

  @artist = Artist.find(:all)
    format.html { render :action => "new" }
    format.xml  { render :xml => @album.errors, :status =>

:unprocessable_entity }
end

end

end


#2

2009/3/31 Santiago A. removed_email_address@domain.invalid

<%=select_tag('artist_id',options_for_select([["Select One",0]] +

options_for_select puede recibir la opción :include_blank => ‘Selecciona
un
artista’

La forma de trabajar con ello es igual que la de resto de parámetros de
modelo.

Añades una validación, el usuario no selecciona artista, el modelo no
valida
y le muestras el mensaje de error como buenamente te guste.

Es como se me ocurre a mi.

Otra opción añadida a la anterior es añadir validación mediante
javascript,
e insisto añadida, no suple la anterior. Esto hace que la navegación sea
más
cómoda ya que no hay que recargar para ver que se te ha olvidado
seleccionar
al artistazo.

Un Saludo.


#3

también comentar que creo que lo suyo sería que en lugar de usar
select_tag
usaras el helper select para asociar el valor del artista al album
automáticamente ya que realmente no te hace falta instanciarlo:

<%= f.select :artist_id …

salud!

2009/3/31 Guillermo removed_email_address@domain.invalid


#4

Borja Martín wrote:

también comentar que creo que lo suyo sería que en lugar de usar
select_tag
usaras el helper select para asociar el valor del artista al album
automáticamente ya que realmente no te hace falta instanciarlo:

<%= f.select :artist_id …

salud!

2009/3/31 Guillermo removed_email_address@domain.invalid

Ahora lo pruebo !! Muchas Gracias!!


#5

Guillermo wrote:

2009/3/31 Santiago A. removed_email_address@domain.invalid

<%=select_tag('artist_id',options_for_select([["Select One",0]] +

options_for_select puede recibir la opción :include_blank => ‘Selecciona
un
artista’

La forma de trabajar con ello es igual que la de resto de parámetros de
modelo.

Añades una validación, el usuario no selecciona artista, el modelo no
valida
y le muestras el mensaje de error como buenamente te guste.

Es como se me ocurre a mi.

Otra opción añadida a la anterior es añadir validación mediante
javascript,
e insisto añadida, no suple la anterior. Esto hace que la navegación sea
más
cómoda ya que no hay que recargar para ver que se te ha olvidado
seleccionar
al artistazo.

Un Saludo.

Muchas Gracias! Solucionaron mi problema!

SAludos y Gracias!