我在显示来自单独控制器的数据时遇到问题。我有很多用户,每个用户都有很多页面。我遵循本教程进行了一些小调整。
不断出现的错误是:
NoMethodError in SitesController#show
undefined method `page' for #<ActionDispatch::Request:0x00000102452d30>
我的路线.rb如下:
devise_for :users
resources :users, :only => [:index, :show] do
resources :pages, :shallow => true
end
match '/' => 'sites#show', :constraints => { :subdomain => /.+/ }
root :to => "home#index"
我有一个站点控制器:
class SitesController < ApplicationController
def show
@site = Site.find_by_name!(request.page)
end
end
我也试过:
def show
@site = Site.find_by_name!(params[:site])
end
这给出了一个不同的错误。
我完全被困在想办法弄清楚!
期待您的帮助。
Bob
问题就在这里:request.page
request
对象属于ActionDispatch::Request
类,该类没有page
方法。
要跟踪这样的错误,您可以尝试查看文档或在调试器中乱搞。
尝试在启用--debugger
的情况下运行控制器。
- 如果您运行的是Ruby 1.8,请安装
ruby-debug
-gem - 如果您运行的是Ruby1.9,请安装
ruby-debug19
gem -
在此处添加
debugger
调用:class SitesController < ApplicationController def show debugger @site = Site.find_by_name!(request.page) end end
-
使用
--debugger
选项运行服务器。 - 查看
p request.page
的功能。我打赌它会有一个"未定义的方法"错误,当你试图查看控制器的操作时,你就会看到 - 如果你做一个
p request.class
,你可以找到对象是什么类,然后查找文档来了解如何使用它