2012-07-17 109 views
0

这是工作,但现在我打电话时的update_attributes,提示以下错误:Rails的 - 现在的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' 

什么是困惑我的是,我的@song对象不有它的“名字”。 (请参阅下面的架构),但艺术家的确如此。歌曲和艺术家通过多对多的关系相关联。看起来像update_attributes正在尝试更新艺术家对象?没想到它应该这样做。真的不知道这里有什么帮助将不胜感激。

谢谢,

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 

架构

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 

例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"} 
+0

尝试运行'轨C'然后'Song.find(5)' – 2012-07-17 05:05:47

回答

0

试试这个,因为那些不在歌类中。

params[:song].delete("@content_type") 
params[:song].delete("@tempfile") 
params[:song].delete("@headers") 
+1

那些被用来将歌曲文件上传到AWS后来在更新。我现在已经离开了我的计划,但是我会在下午晚些时候回家后告诉你,让他们看看他们是否在引发错误。我也将添加其余的更新。感谢您及时的回复! – therealtedkennedy 2012-07-17 13:47:19

+1

工作。谢谢!完全是那些。结束时只需在amazon上传后用params [:song] .delete:s3_name删除s3_name(包含content_type,tempfile和headers)。 – therealtedkennedy 2012-07-18 01:42:46

相关问题