2012-07-17 2 views
0

을 받고 지금 일하고 있었다, 그러나 update_attributes를 호출 할 때 지금은 아래의 오류 받고 있어요 : 날 내 @song 객체가 없다는 것입니다 혼란 무엇레일 - 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' 

그 안에 "이름"이 있어야합니다. (아래의 스키마 참조). 노래와 아티스트는 다 대다 관계로 연결됩니다. 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)' –

답변

0

송 클래스에 있지 않으므로 사용해보십시오.

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

사람들은 나중에 업데이트에서 AWS에 노래 파일을 업로드하는 데 사용됩니다. 나는 지금 내 의사와 떨어져 있지만, 나는 그들을 제거하고 내가 오늘 오후에 집에 도착했을 때 그들이 그 실수를 일으키고 있는지 알게하고 알게한다. 나는 또한 나머지를 업데이트에 추가 할 것이다. 빠른 답변 감사합니다! – therealtedkennedy

+1

Worked. 감사! 그것은 완전히 그것들이었다. amazon 업로드 후 params [: song] .delete : s3_name을 사용하여 s3_name (포함 된 content_type, tempfile 및 headers)을 삭제하는 것만으로 끝냅니다. – therealtedkennedy

관련 문제