我有一个模型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)
这个让我很难过。如果有人能澄清为什么这似乎不起作用,我会很感激。
答案 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|
肯定应该消除您的错误(生成正确的网址和方法),并让您有机会使用相同的表单进行new
和edit
操作。
答案 1 :(得分:-1)
我认为你不需要做更多的事情只需改变这样的形式:
form_for @disc do |f|
#your fields
end