2016-11-13 151 views
0

我希望能够使用PUT请求来编辑我在Ruby on Rails应用程序中上传的歌曲的标题。在Ruby on Rails中创建PUT请求?

def update 
    @sound_byte = SoundByte.find(params[:id]) #Error here 
    @sound_byte.update!(sound_byte_params) 
    flash[:success] = "The soundbyte title was changed." 
    redirect_to sound_byte_path 
end 

private 

def sound_byte_params 
    params.require(:sound_byte).permit(:mpeg, :mpeg_file_name) 
end 

我最终得到这样的错误:

Couldn't find SoundByte with 'id'=song_name 

如何解决这个问题的任何想法?我正在使用Paperclip gem来启用音频/ mpeg文件上传。

编辑:这是我的看法代码

<%= link_to "Edit", sound_byte_path(sound_byte.mpeg_file_name), class: "btn btn-primary btn-lg btn-xlarge", :method => :put %> 
+0

有一些问题与您的PARAMS。你能提供表单代码吗? – phamhoaivu

+0

@phamhoaivu对不起,我不太清楚您的表单代码是什么意思?我将代码附加在与PUT请求相对应的视图中。 –

+0

我以为你必须有一个表单来编辑歌曲。某些文本框输入新歌曲的名称和一个提交按钮。 – phamhoaivu

回答

1

在视图页面中,你传递字符串作为sound_byte.mpeg_file_name PARAMS,但在你的控制器,可以使用ID @sound_byte = SoundByte.find(params[:id])

试试这个

<%= link_to "Edit", sound_byte_path(sound_byte.id), class: "btn btn-primary btn-lg btn-xlarge", :method => :put %> 
+0

我现在得到一个错误,指出:参数是丢失或为空值:sound_byte 的错误是在这条线:params.require(:sound_byte).permit(:MPEG) 我需要做什么phamhoaivu推荐并包含一个表单以提交新歌曲名称? –

+0

是的,你需要粘贴表单代码和config/routers.rb。如果可以的话,还可以粘贴控制台日志,显示参数,处理控制器和操作。问题是你传递了一些非法数据到你的控制器,PARAMS [ID]不应该等于名字。 –