NoMethodError - 未定义的方法

时间:2011-04-27 07:51:51

标签: ruby-on-rails-3

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

不断出现的错误是:

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

这会产生不同的错误。

我总是试图弄明白这一点!

期待您的协助。

鲍勃

1 个答案:

答案 0 :(得分: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,您可以找到该对象的类,然后查找文档以了解如何使用它。