gpt4 book ai didi

ruby-on-rails - Rails 在使用单个资源更新时没有路由匹配 POST url

转载 作者:行者123 更新时间:2023-12-05 04:07:35 24 4
gpt4 key购买 nike

我正在创建一个 Rails 应用程序,其中有一个资源用作整个网站的常规设置。我将所有内容设置如下:

config/routes.rb

authenticate :user do
scope '/admin' do
resource :basics #This is my resource's name, put in singular
# ...
end
end

controllers/basics_controller.rb

private

# Use callbacks to share common setup or constraints between actions.
def set_basic
@basic = Basic.first
end

views/basics/_form.html.erb

<%= form_with(model: @basics, local: true) do |form| %>

下面是 rake routes 显示的有关此资源的内容:

new_basics GET    /admin/basics/new(.:format)      basics#new
edit_basics GET /admin/basics/edit(.:format) basics#edit
basics GET /admin/basics(.:format) basics#show
PATCH /admin/basics(.:format) basics#update
PUT /admin/basics(.:format) basics#update
DELETE /admin/basics(.:format) basics#destroy
POST /admin/basics(.:format) basics#create

我可以毫不费力地显示表格。但是,当我提交它时,出现以下错误:

No route matches [POST] "/admin/basics/edit"

当我查看生成的 HTML 表单时,我可以看到它传递了“/admin/basics/edit”作为一个 Action ,而在我的情况下它应该只是“/admin/basics”。

我应该怎么做才能使这项工作正常进行?

提前致谢

最佳答案

看起来您可能将错误的实例变量传递给了 form_with 方法? IIRC,如果模型参数为 nil,Rails 假定表单操作应与当前路径相同。

@basics 未定义(至少在您共享的 Controller 代码中)。将其替换为 @basic 可能适用于编辑(当 Basic.first 存在时),但不适用于创建(如果 Basic.first 不存在) ).

你可以尝试像这样在你的 Controller 中初始化@basic

def set_basic
@basic = Basic.first_or_initialize
end

然后传递给form_with

<%= form_with(model: @basic, local: true) do |form| %>

关于ruby-on-rails - Rails 在使用单个资源更新时没有路由匹配 POST url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48540970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com