This was working, but now i'm getting the below error when calling update_attributes :
NoMethodError in SongsController#update
undefined method `name' for nil:NilClass
Rails.root: C:/Sites/music3
Application Trace | Framework Trace | Full Trace
app/controllers/songs_controller.rb:164:in `update'
What is confusing me is that my @song object doesn't have "name" in it. (see schema below), but the artist does. Songs and Artists are associated through a many to many relationship. Seems like update_attributes is trying to update the artist object as well? Didn't think it was supposed to do this. Really not sure whats up here any help would be greatly appreciated.
Thanks,
Song Controller
def update
@artist = Artist.find(params[:artist_id])
authorize! :update, @artist
@song = Song.find(params[:form_song_id])
@song.artists << @artist
@s3_test = params[:s3_name]
@song.update_attributes(params[:song]) #causing the error
end
Schema
create_table "artists", :force => true do |t|
t.string "name"
t.string "city"
t.string "province"
t.string "country"
t.text "influence"
t.text "bio"
t.text "contact_info"
t.date "date_founded"
t.date "created_date"
t.datetime "created_at"
t.datetime "updated_at"
t.string "url_slug"
t.string "pay_pal"
t.string "image"
end
create_table "songs", :force => true do |t|
t.string "song_name"
t.string "song_artist"
t.string "song_contribute_artist"
t.string "song_written"
t.string "song_licence_type"
t.string "song_url_slug"
t.date "song_licence_date"
t.integer "song_plays"
t.text "lyrics"
t.datetime "created_at"
t.datetime "updated_at"
t.string "s3_name"
t.string "download_link"
t.string "torrent_link"
t.string "s3_id"
t.integer "s_a_id"
end
Example Params.
{"utf8"=>"✓",
"_method"=>"put",
"song"=>{"s3_name"=>#<ActionDispatch::Http::UploadedFile:0x260e908 @original_filename="done good (final final).mp3",
@content_type="audio/mp3",
@headers="Content-Disposition: form-data; name=\"song[s3_name]\"; filename=\"done good (final final).mp3\"\r\nContent-Type: audio/mp3\r\n",
@tempfile=#<File:C:/Users/Ted/AppData/Local/Temp/RackMultipart20120716-1600-ohtooj>>,
"song_name"=>"Done Good",
"song_artist"=>"Grimes",
"song_contribute_artist"=>"",
"song_written"=>"Ted Kennedy",
"song_licence_type"=>"copywrite",
"song_licence_date(1i)"=>"2012",
"song_licence_date(2i)"=>"7",
"song_licence_date(3i)"=>"17",
"song_plays"=>"",
"song_url_slug"=>"",
"lyrics"=>"None"},
"commit"=>"Upload",
"artist_id"=>"1",
"form_song_id"=>"5",
"id"=>"create"}
Try this since those are not in the song class.
params[:song].delete("@content_type")
params[:song].delete("@tempfile")
params[:song].delete("@headers")