我正在设置(网球场预订)网站的/ admin部分。 config / routes.rb 中的路由如下:
namespace :admin do
resources :players
resources :courts
end
我正在使用常规的CRUD控制器,视图和_form局部视图。这是 controllers / admin / court_controller.rb :
class Admin::CourtsController < ApplicationController
layout "admin"
def index
@courts = Court.all
end
def show
@court = Court.find(params[:id])
end
def new
@court = Court.new
end
def edit
@court = Court.find(params[:id])
end
...
end
views / admin / courts / new.html.erb 是标准的:
<%= render 'form' %>
...和 views / admin / courts / _form.html.erb 开始如下:
<%= form_with(model: @court, local: true, url: admin_court_path(@court)) do |form| %>
除了我尝试创建新法院外,所有内容(包括更新/ PATCH)都运行良好。路线(照常)是http://localhost:3000/admin/courts/new。我得到
ActionController :: UrlGenerationError在Admin :: Courts#new中 显示c:/Sites/wtna/app/views/admin/courts/_form.html.erb,其中第1行出现: 没有路由匹配{:action =>“ show”,:controller =>“ admin / courts”,:id => nil},缺少必需的键:[:id] 提取的源(第1行附近):
<%= form_with(model: @court, local: true, url: admin_court_path(@court)) do |form| %>
所以我跳进控制台并尝试:
c = Court.new
显示(按预期):
#<Court id: nil, name: nil, active: true, description: nil, address: nil, lat: nil, lng: nil, created_at: nil, updated_at: nil, timezone: "Sydney">
(我注意到ID为零,因为我还没有保存记录。)
话虽如此,当我键入:
app.admin_courts_path或app.admin_courts_path
我得到一个错误:
NameError:main:Object的未定义局部变量或方法“ admin_court(s)_path”
所以我有两个(相关)问题:
FWIW,路线似乎按顺序排列:
答案 0 :(得分:0)
错误是因为您在错误的路径下提交了表单。您在form_with
中提到的路径是现有法院记录的 show 路径。但是您需要提交到 / admin / courts ,并且应该是POST请求。
尝试一下:
form_with(model: @court, local: true, url: admin_courts_path, method: :post)
了解更多here。