如何使编辑和删除控制器操作起作用
How to get the edit and delete controller action to work
我无法执行编辑和删除控制器操作。我在另一个控制器中有几乎相同的代码并且不会失败。
这是编辑表单:
<form method="POST" action="/users">
<input id="hidden" type="hidden" name="_method" value="patch">
<div align="center">
....
.....
</div>
</form>
以及相关的控制器操作:
patch "/users/:id" do
@user = User.find(params[:id])
@user.name = params[:name]
@user.email = params[:email]
@user.password = params[:password]
@user.save
redirect to "/users/#{@user.id}"
end
#fix this delete request later
delete '/users/:id' do
@user = User.find(params[:id])
@user.delete
redirect '/users'
end
我收到 "Sinatra doesn't know this ditty" 错误消息:
Try this:
# in application_controller.rb
class ApplicationController
post '/users/' do
"Hello World"
end
end
我不确定 "post/users/" 的来源。
您的表单无效,因为操作属性是 /users
并且您的路线是 /users/:id
。
如果您已将用户传递给视图,您可以执行以下操作:
<form method="POST" action="/users/<%= @user.id %>">
但是您实际上并没有以任何体面的方式处理表单提交。接受用户输入时,您总是希望检查输入是否有效以及记录是否实际保存。如果你只是假设一切都很好,它会很快爆炸。
如果您正在使用 ActiveRecord/Mongoid,您可以这样处理:
patch "/users/:id" do
@user = User.find(params[:id])
if @user.update(params.slice(:name, :email, :password))
redirect to "/users/#{@user.id}"
else
erb :edit # re-render the form
end
end
所以我解决了这个问题。我正在使用这个名为 Corneal 的 gem 来基本上 运行 所需文件结构的支架,但它缺少 Rack::MethodOverride link 在 config.ru 中的使用。感谢 max 为我指明了正确的方向。
我无法执行编辑和删除控制器操作。我在另一个控制器中有几乎相同的代码并且不会失败。
这是编辑表单:
<form method="POST" action="/users">
<input id="hidden" type="hidden" name="_method" value="patch">
<div align="center">
....
.....
</div>
</form>
以及相关的控制器操作:
patch "/users/:id" do
@user = User.find(params[:id])
@user.name = params[:name]
@user.email = params[:email]
@user.password = params[:password]
@user.save
redirect to "/users/#{@user.id}"
end
#fix this delete request later
delete '/users/:id' do
@user = User.find(params[:id])
@user.delete
redirect '/users'
end
我收到 "Sinatra doesn't know this ditty" 错误消息:
Try this:
# in application_controller.rb
class ApplicationController
post '/users/' do
"Hello World"
end
end
我不确定 "post/users/" 的来源。
您的表单无效,因为操作属性是 /users
并且您的路线是 /users/:id
。
如果您已将用户传递给视图,您可以执行以下操作:
<form method="POST" action="/users/<%= @user.id %>">
但是您实际上并没有以任何体面的方式处理表单提交。接受用户输入时,您总是希望检查输入是否有效以及记录是否实际保存。如果你只是假设一切都很好,它会很快爆炸。
如果您正在使用 ActiveRecord/Mongoid,您可以这样处理:
patch "/users/:id" do
@user = User.find(params[:id])
if @user.update(params.slice(:name, :email, :password))
redirect to "/users/#{@user.id}"
else
erb :edit # re-render the form
end
end
所以我解决了这个问题。我正在使用这个名为 Corneal 的 gem 来基本上 运行 所需文件结构的支架,但它缺少 Rack::MethodOverride link 在 config.ru 中的使用。感谢 max 为我指明了正确的方向。