Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails-Update_属性正在工作,正在获取未定义的方法错误_Ruby On Rails 3_Update Attributes - Fatal编程技术网

Ruby on rails 3 Rails-Update_属性正在工作,正在获取未定义的方法错误

Ruby on rails 3 Rails-Update_属性正在工作,正在获取未定义的方法错误,ruby-on-rails-3,update-attributes,Ruby On Rails 3,Update Attributes,这是可行的,但现在调用update_属性时出现以下错误: 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_属性时出现以下错误:

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_属性也在尝试更新艺术家对象?没想到它会这么做。我真的不知道这里有什么。如果有任何帮助,我们将不胜感激

谢谢

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
示例参数

{"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"}
{“utf8”=>“–œ”,
“_方法”=>“放置”,
“song”=>{“s3_name”=>#,
“song_name”=>“做得好”,
“song_艺术家”=>“Grimes”,
“歌曲贡献艺术家”=>“”,
“写歌”=>“泰德·肯尼迪”,
“歌曲许可证类型”=>“文案”,
“song_许可证日期(1i)”=>“2012年”,
“song_许可证日期(2i)”=>“7”,
“song_许可证日期(3i)”=>“17”,
“song_plays”=>“”,
“song\u url\u slug”=>“”,
“歌词”=>“无”},
“提交”=>“上传”,
“艺术家id”=>“1”,
“form_song_id”=>“5”,
“id”=>“创建”}

试试这个,因为它们不在歌曲类中

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

尝试运行
rails c
,然后运行
Song.find(5)
这些用于在更新中稍后将歌曲文件上载到AWS。我现在不在公司,但我将在今天下午晚些时候回家时删除它们,看看是否是它们导致了错误,并让您知道。我还将添加其余部分以更新。感谢您的快速响应!工作正常。谢谢!完全是这些。最后只是删除了s3_名称(包含内容类型、tempfile和标题)和参数[:song]。在amazon上载后删除:s3_名称。
params[:song].delete("@content_type")
params[:song].delete("@tempfile")
params[:song].delete("@headers")