Ruby on rails 3 Rails-Update_属性正在工作,正在获取未定义的方法错误
这是可行的,但现在调用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' 让我困惑的是,我
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")