2015-04-29 17 views
0

我有一個模型,Discform_for更新失敗時,雖然創建工作?

Disc#new動作傳遞到@disc = Disc.new具有簡單form_for助手的圖,讀

form_for(:disc, url: {action: 'create'}) do |f| 
    # the usual text fields etc follow 

discs_controller.rb,我有一個私人方法disc_params,其內容params.require(:disc).permit(:owner, :title)等。 Disc#create只是說Disc.create(disc_params)

這一切都工作得很好。遇到麻煩的地方是創建編輯表單。

Disc#edit讀數爲@disc = Disc.find(params[:id])edit視圖是new視圖的確切克隆,只有其開頭行顯示form_for(:disc, url: {action: 'update', id: @disc.id})。它提交到Disc#update,其內容爲Disc.find(params[:id]).update(disc_params)

在我看來,它應該工作,但顯然我錯了,因爲它會拋出以下錯誤:param丟失或值爲空:光盤

跟蹤點,這兩條線:

params.require(:disc).permit(:owner_id, :title, :contents) 

Disc.find(params[:id]).update(disc_params) 

這一個絆倒了我。我很感激,如果有人可以澄清爲什麼這似乎不工作。

回答

1

而不是使用這個的:

form_for(:disc, url: {action: 'create'}) do |f| 
form_for(:disc, url: {action: 'update', id: @disc.id}) do |f| 

只需提供一個實例Disc模式:

form_for @disc do |f| 

它肯定應該消除你的錯誤(生成正確的URL和方法),也給你一個機會使用與newedit操作相同的表單。

-1

我覺得你不需要做額外的東西,只是改變形式是這樣的:

form_for @disc do |f| 
    #your fields 
end  
+2

什麼是20+分鐘後給予同樣的答案呢?我只是不明白,沒有冒犯。 – potashin

相關問題