2016-11-13 150 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]不應該等於名字。 –