Ruby 在 Rails - 编辑更新操作
Ruby on Rails - Edit Update Action
我有一个表单,我想编辑一些信息,所以我为我们的编辑表单绘制了一条获取路径和一条更新路径。
Routes.rb:
resource :guide_dog_forms
get '/cao-guia/:id/editar', to: 'guide_dog_forms#edit', as: :edit_guide_dog_form
put '/cao-guia/:id/', to: 'guide_dog_forms#update'
之后我编辑了我的控制器,所以我添加了如下操作:
class GuideDogFormsController < ApplicationController
def create
@contact = GuideDogForm.new(params[:contact])
if @contact.save
GuideDogMailer.delay_for(10.seconds, retry: true).create(@contact)
render nothing: true, status: 200
else
render nothing: true, status: 400
end
end
def edit
@guidedoguser = GuideDogForm.find(params[:id])
end
def update
@guidedoguser = GuideDogForm.find(params[:id])
@guidedoguser.update(name: params[:name], email: params[:email])
redirect_to guide_dog_form_path(@guidedoguser)
end
end
我目前的佣金路线是这样的:
guide_dog_forms POST - /guide_dog_forms(.:format) - guide_dog_forms#create
new_guide_dog_forms GET - /guide_dog_forms/new(.:format) - guide_dog_forms#new
edit_guide_dog_forms GET - /guide_dog_forms/edit(.:format) - guide_dog_forms#edit
GET - /guide_dog_forms(.:format) - guide_dog_forms#show
PATCH - /guide_dog_forms(.:format) - guide_dog_forms#update
PUT - /guide_dog_forms(.:format) - guide_dog_forms#update
DELETE - /guide_dog_forms(.:format) - guide_dog_forms#destroy
当我提交我的编辑表单时,呈现的 url 是 localhost:3000/guide_dog_forms.80
(80 是我尝试编辑的表单的 ID),而不是我在我的路线上定义的。为什么会这样?任何人都可以帮助我吗?谢谢。
这是您 resource
路线的副产品。
试试 运行 rake routes
。您应该在那里看到带有输出 /guide_dog_form/:id
的 guide_dog_form_path
路由,它解释了重定向。如果您希望覆盖 resource
方法的行为,您可能必须设置另一个命名路由并重定向到那里。
通常您会将对象的单数版本传递给 resource
。即 resource :guide_dog_form
或 resources
的复数形式。即 resources :guide_dog_forms
根据您提供的代码,我想您的意图是:
resources :guide_dog_forms
*FWIW,从 Rails 4 开始,习惯上使用 PATCH
动词而不是 PUT
来更新记录。
我有一个表单,我想编辑一些信息,所以我为我们的编辑表单绘制了一条获取路径和一条更新路径。
Routes.rb:
resource :guide_dog_forms
get '/cao-guia/:id/editar', to: 'guide_dog_forms#edit', as: :edit_guide_dog_form
put '/cao-guia/:id/', to: 'guide_dog_forms#update'
之后我编辑了我的控制器,所以我添加了如下操作:
class GuideDogFormsController < ApplicationController
def create
@contact = GuideDogForm.new(params[:contact])
if @contact.save
GuideDogMailer.delay_for(10.seconds, retry: true).create(@contact)
render nothing: true, status: 200
else
render nothing: true, status: 400
end
end
def edit
@guidedoguser = GuideDogForm.find(params[:id])
end
def update
@guidedoguser = GuideDogForm.find(params[:id])
@guidedoguser.update(name: params[:name], email: params[:email])
redirect_to guide_dog_form_path(@guidedoguser)
end
end
我目前的佣金路线是这样的:
guide_dog_forms POST - /guide_dog_forms(.:format) - guide_dog_forms#create
new_guide_dog_forms GET - /guide_dog_forms/new(.:format) - guide_dog_forms#new
edit_guide_dog_forms GET - /guide_dog_forms/edit(.:format) - guide_dog_forms#edit
GET - /guide_dog_forms(.:format) - guide_dog_forms#show
PATCH - /guide_dog_forms(.:format) - guide_dog_forms#update
PUT - /guide_dog_forms(.:format) - guide_dog_forms#update
DELETE - /guide_dog_forms(.:format) - guide_dog_forms#destroy
当我提交我的编辑表单时,呈现的 url 是 localhost:3000/guide_dog_forms.80
(80 是我尝试编辑的表单的 ID),而不是我在我的路线上定义的。为什么会这样?任何人都可以帮助我吗?谢谢。
这是您 resource
路线的副产品。
试试 运行 rake routes
。您应该在那里看到带有输出 /guide_dog_form/:id
的 guide_dog_form_path
路由,它解释了重定向。如果您希望覆盖 resource
方法的行为,您可能必须设置另一个命名路由并重定向到那里。
通常您会将对象的单数版本传递给 resource
。即 resource :guide_dog_form
或 resources
的复数形式。即 resources :guide_dog_forms
根据您提供的代码,我想您的意图是:
resources :guide_dog_forms
*FWIW,从 Rails 4 开始,习惯上使用 PATCH
动词而不是 PUT
来更新记录。