【问题标题】:How to get the edit and delete controller action to work如何使编辑和删除控制器动作起作用
【发布时间】:2020-04-14 08:18:36
【问题描述】:

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

这是编辑表单:

<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

我不确定“post/users/”的来源。

【问题讨论】:

  • "post/users/" 只是一个例子,并不是说你的代码中应该有文字短语。

标签: ruby sinatra


【解决方案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

【讨论】:

  • 给出错误试试这个:# in application_controller.rb class ApplicationController post '/users/31' do "Hello World" end end
  • 很抱歉格式错误,感谢您的帮助,您以前也帮助过我,我很感激。它把我路由到localhost:9393/users/31 并说我认为它不存在。
  • 我同意我没有正确提交表单,我只是想让功能正常工作,然后处理其余的
  • 我认为您使用的是&lt;input id="hidden" type="hidden" name="_method" value="patch"&gt; 而不是value="PATCH"Rack::MethodOverride其实对这个案子很严格。
  • 我的 config.ru 缺少使用 Rack::MethodOverride。那是错的。感谢您的帮助!
【解决方案2】:

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

【讨论】:

  • 欢迎来到 SO。答案不是总结或感谢,因为 SO 不是留言板或论坛,它更像是一本在线参考书。如果您打算将其作为选定的答案,那么您应该将其充实为真正的答案。
猜你喜欢
  • 2013-07-30
  • 2020-08-12
  • 2018-11-13
  • 1970-01-01
  • 2014-11-18
  • 2011-03-08
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
相关资源
最近更新 更多