2011-04-27 106 views
2

我在显示来自单独控制器的数据时出现问题。我有许多用户,每个用户都有很多页面。我已经按照this教程进行了一些小调整。NoMethodError - undefined方法

是不断出现的错误是:

NoMethodError in SitesController#show 

undefined method `page' for #<ActionDispatch::Request:0x00000102452d30> 

我的routes.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 

这给出了不同的错误。

我总是试图弄清楚这一点!

期待您的协助。

鲍勃

回答

0

问题是这里:request.page

request的对象是类ActionDispatch::Request,它不具有page方法。

要追踪这样的错误,您可以尝试查看文档或在调试器中调试。

尝试运行您的控制器并启用--debugger

  • 如果您正在运行Ruby 1.8,请安装ruby-debug gem。
  • 如果您正在运行Ruby 1.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,您可以找出该对象是什么类,然后查看文档以了解如何使用它。
相关问题