Rails 识别未知的 url 参数

Posted

技术标签:

【中文标题】Rails 识别未知的 url 参数【英文标题】:Rails recognizing unknown url paramaters 【发布时间】:2014-07-05 12:02:29 【问题描述】:

我不知道为什么,但最近我尝试更改路线以将新项目添加到

/project/new 而不是渲染 new.html.haml 它渲染 show.html.haml 并且 new 是参数。

在我的 routes.rb 中

Mika::Application.routes.draw do
  root "pages#home"
  get '/contact' => "pages#contact"
  get '/about' => 'pages#about'
  get '/privacy' => 'pages#privacy'
  get '/tos' => 'pages#terms_of_service'

  post '/contact' => 'messages#contact'

  resources :projects, :only => [:index, :show]
  resources :projects, :only => [:update, :edit, :create, :post, :new], :constraints =>  :subdomain => 'admin' 
end

我不完全确定从哪里解决这个问题,甚至什么时候开始

在终端我得到了这个

Started GET "/projects/new" for 127.0.0.1 at 2014-05-16 15:23:20 -0700
Processing by ProjectsController#show as HTML
  Parameters: "id"=>"new"
  Rendered projects/show.html.haml within layouts/application (0.1ms)
  Rendered layouts/_shim.html.haml (0.8ms)
  Rendered layouts/_header.html.haml (0.5ms)
  Rendered layouts/_footer.html.haml (0.2ms)
  Rendered layouts/_javascript.html.haml (0.0ms)
  Rendered layouts/_analytics.html.haml (0.0ms)
Completed 200 OK in 9ms (Views: 8.0ms | ActiveRecord: 0.0ms)

*EDIT 将路由文件更改为此工作

resources :projects, :only => [:update, :edit, :create, :post, :new], :constraints =>  :subdomain => 'admin' 
resources :projects, :only => [:index, :show]

但它仍在为不存在的参数渲染创建,结果为空白页

【问题讨论】:

:new 在下面,如果你看到只有管理员可用。 【参考方案1】:

您已经为 show 和 new 定义了这些 url:

project       GET /projects/:id(.:format)  projects#show
new_project   GET /projects/new(.:format)  projects#new :subdomain=>"admin"

因此,如果您不使用管理子域并输入 url /projects/new 路由器将其匹配到更通用的项目/节目。使用 url 格式 /projects/:id 将字符串 new 解释为 id。

Processing by ProjectsController#show as HTML
Parameters: "id"=>"new"

因此,如果您想使用或不使用 admin 子域访问 projects/new,只需在路由中指定:

resources :projects, :only => [:index, :show, :new]
resources :projects, :only => [:update, :edit, :create, :post, :new], :constraints =>  :subdomain => 'admin' 

【讨论】:

这不是问题...问题是如果我输入 /projects/FAKEID,我不会被重定向到 404 页面,我得到的是您在上面看到的白页 那是因为您使用的是管理子域并且只有在没有它的情况下才能使用显示操作?为路线中的两行添加显示操作 您的控制器是否包含用于获取项目的代码?如果是这样,如果它正在执行,它应该会引发 not found 错误。 这也可能有帮助***.com/questions/2385799/…

以上是关于Rails 识别未知的 url 参数的主要内容,如果未能解决你的问题,请参考以下文章

ruby 方法中如何使用符号来识别参数

我的 rails 嵌套模型无法识别 _destroy 属性

如何使用 HTML 识别和显示嵌入的 URL 参数?

为啥我的 django 模板无法识别我在 views.py 文件中设置的 url 参数?

Rails:将所有未知路由重定向到 root_url

面部识别和神经网络分类未知数