使用名称空间时,无法在控制台中测试Rails路由帮助程序

时间:2018-08-13 06:22:20

标签: ruby-on-rails routes console

我正在设置(网球场预订)网站的/ 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”

所以我有两个(相关)问题:

  1. 为什么我不能在控制台中测试路由? (所有常用的非管理员路由都可以很好地运行,例如app.players_path)
  2. 我需要对表单助手进行什么操作才能使其正常工作?

FWIW,路线似乎按顺序排列:

enter image description here

1 个答案:

答案 0 :(得分:0)

错误是因为您在错误的路径下提交了表单。您在form_with中提到的路径是现有法院记录的 show 路径。但是您需要提交到 / admin / courts ,并且应该是POST请求。

尝试一下:

form_with(model: @court, local: true, url: admin_courts_path, method: :post)

了解更多here