rails select box

Hi there,

i'm having a hard setting up a select list in a rails form.
I want the select list to update a field called 'artist_cat' in a table called "artists" with the id value of a table called "categories", and i want the list of choices to be the value categories.name.

The box itself appears but the field 'artist_cat' is not updated...

i don't understand what's wrong with my code...

Any ideas ?


<p><label for="artists">Artiste ou espoir</label><br/></p>
<%= select("artist", "artist_cat", Categorie.find_all.collect {|c| [ c.cat_name, c.id ] })  %>

Open in new window

Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

wesgarrisonConnect With a Mentor Commented:
Do you have another artist_cat field there?  Maybe a hidden field or something?

Everything looks fine to me. I don't see a re-initialization in the controller, just the update_attributes() call.

Your option values look correct.  In fact, it looks the db is set to value 2 in the code snippet you just posted because it was set to be selected by default.
What does your update action look like?

Paste your update action for this form and the params when submitting the form and we'll check them out to see what's going on.
terencepiresAuthor Commented:
Ok, here it is
  def update
    @artist = Artist.find(params[:id])
    if @artist.update_attributes(params[:artist])
      flash[:notice] = "L'artiste a bien été enregistré."
      #redirect_to :action => 'show', :id => @artist
      @artists = Artist.find(:all, :order => "artist_cat, name")
      render :action => "list"
      flash[:notice] = 'Les modifications ont bien été enregistrées.'
      redirect_to :action => 'list'

Open in new window

[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

Can you send the params too?

Check your log/development.log.
Go to the bottom.
Look for the update action being called.
It'll look something like the below.

Just the parameters line (well, all of them) is what I'd like to see.
Processing ArtistController#update (for at 2009-05-07 00:04:19) [PUT]
  Parameters: {"commit"=>"Update", "authenticity_token"=>"k3QXSv3j8t7VcDgH92lalDMfxmb+pKrT9o1/HUXBvxY=", "artist"=>{"name"=>"Aaron", ...}, "id"=>"833241487"}

Open in new window

terencepiresAuthor Commented:
Ok they are in the txt file attached
Whoops.  No file!
terencepiresAuthor Commented:
oh :)

sorry :)
Okay, you ARE update the artist_cat value:
UPDATE artists SET `bio` = '', `name_fr` = 'Alexandra Maria Lara', `name` = 'Alexandra Maria Lara', `bio_zh` = '', `artist_cat` = 0, ...

What makes you think that you aren't updating the value?

You should probably redirect_to :list after a successful update, too. Why re-render when you can redirect?
terencepiresAuthor Commented:
well, i see the field, but for some reason, the value passed to the update action is always the value that in current in the database and not the selected one.

here is the generated drop down list code, which moreover is correct...

so i assume there is something being reinitialized somewhere in the controller, am i correct ?
<select id="artist_artist_cat" name="artist[artist_cat]"><option value="0">acteurs</option>
<option value="1">musiciens</option>
<option value="2" selected="selected">plasticiens</option></select>

Open in new window

terencepiresAuthor Commented:
Ok solved, you were right !

I had a checkbox linked to artist_cat, it's all sorted out now !

Thank you very much, you helped a lot !
All Courses

From novice to tech pro — start learning today.