A relationship exists between "artist" and "album". Artist.rb has_many :albums Album.rb belongs_to :artist The edit form for "album" creates/updates this relationship in a database using the "select_tag". <%= select_tag(''artist_id'', options_for_select([[''choose one'', '''']] + @artists.collect {|art| [art.name, art.id]}, @album.artist_id)) -%> resulting in this HTML <select id="design_id" name="design_id"> <option value="">choose one</option> <option value="1">Artist #1</option> <option value="2">Artist #2</option> <option value="3">Artist #3</option> The "album" controller is successfully creating/updating the database **as long as** an option other than "choose one" is selected. If "choose one" is selected when submitting the form this error is generated: ActiveRecord::RecordNotFound in AlbumsController#update Couldn''t find Artist with ID Parameters: {"commit"=>"Edit", "id"=>"1", "album"=>{"title"=>"Rock", "Rating"=>"1"}, "artist_id"=>""} Question: How can my controller receive the nil value for "choose one" and successfully process the form? I think I need a logic statement in my controller, but I am not sure how to acquire and handle the nil value. AlbumsController currently reads as follows: def create @album = Album.find(params[:id]) artist = Artist.find(params[:artist_id]) @album.artist = artist if @album.update_attributes(params[:album]) flash[:notice] = ''Album was successfully updated.'' redirect_to(:action => ''show'', :id => @album) else @artists = Artist.find(:all) render(:action => ''edit'') end end Thanks for read this far, I know that is probably too much detail. Your advice is appreciated. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 2/10/07, SelectNothing <rian.murnen-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > A relationship exists between "artist" and "album". > > Artist.rb > has_many :albums > > Album.rb > belongs_to :artist > > The edit form for "album" creates/updates this relationship in a > database using the "select_tag". > > <%= select_tag(''artist_id'', > options_for_select([[''choose one'', '''']] + > @artists.collect {|art| [art.name, art.id]}, > @album.artist_id)) -%>Try this instead: select ''album'', ''artist_id'', @artists.map{|a| [a.name, a.id]}, :prompt => ''Choose one...'' This will pass the artist id (possibly "") as the value of the album[artist_id] parameter, which lets you update it with the call to Album.create or Album update in your controller. That is, there''s no need to update this field separately.> AlbumsController currently reads as follows: > > def create > @album = Album.find(params[:id]) > > artist = Artist.find(params[:artist_id]) > @album.artist = artist > > if @album.update_attributes(params[:album])So the above 4 lines become something like: @album = Album.new(params[:album]) # sets album_id too now if @album.save> flash[:notice] = ''Album was successfully updated.'' > redirect_to(:action => ''show'', :id => @album) > else > @artists = Artist.find(:all) > render(:action => ''edit'') > end > end> Thanks for read this far, I know that is probably too much detail.Not at all; I found your question/problem very clear and easy to follow.> Your advice is appreciated.You''re welcome! George. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Success! Thank you George. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---