如何使编辑和删除控制器操作生效

问题描述 投票:0回答:2

我无法执行编辑和删除控制器操作。我在另一个控制器中有几乎相同的代码,并且不会失败。

这是编辑表单:

<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不知道该内容”的错误消息:

Try this:
# in application_controller.rb
class ApplicationController
  post '/users/' do
    "Hello World"
  end
end

我不确定“帖子/用户/”来自哪里。

ruby sinatra
2个回答
1
投票

您的表单不起作用,因为操作属性为/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

-1
投票

所以我解决了这个问题。我使用的是名为Corneal的gem,基本上是运行所需文件结构的支架,但它缺少config.ru中的Rack :: MethodOverride链接。感谢max为我指出正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.