我无法执行编辑和删除控制器操作。我在另一个控制器中有几乎相同的代码,并且不会失败。
这是编辑表单
<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
``
i am getting the "Sinatra doesn't know this ditty" error message.
"Try this:
# in application_controller.rb
class ApplicationController
post '/users/' do
"Hello World"
end
end
i am not sure where the "post/users/" is coming from.
您的表单不起作用,因为操作属性为/users
,而您的路线为/users/:id
。
如果您已将用户传递给视图,则可以执行以下操作:
<form method="POST" action="/users/<%= @user.id %>">
但是您实际上并没有以任何体面的方式处理表单提交。接受用户输入时,您始终要检查输入是否有效以及记录是否已实际保存。如果您只是假设一切都是笨拙的,那它将很快就炸毁。
如果您使用的是ActiveRecord,您将按照以下方式进行处理:
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