更新失败时的form_for,虽然创建有效吗?

时间:2015-04-29 05:28:31

标签: ruby-on-rails activerecord

我有一个模型Disc

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)

这个让我很难过。如果有人能澄清为什么这似乎不起作用,我会很感激。

2 个答案:

答案 0 :(得分: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|

肯定应该消除您的错误(生成正确的网址和方法),并让您有机会使用相同的表单进行newedit操作。

答案 1 :(得分:-1)

我认为你不需要做更多的事情只需改变这样的形式:

form_for @disc do |f|
  #your fields
end