2011-01-11 59 views
0

在我RoR3應用程序,我有一個名爲NS1讓我有這樣的文件系統結構命名空間:如何使用Ruby on Rails 3在命名空間中繼承類?

ROOT_RAILS/controllers/ 
ROOT_RAILS/controllers/application_controller.rb 
ROOT_RAILS/controllers/ns/ 
ROOT_RAILS/controllers/ns/ns_controller.rb 
ROOT_RAILS/controllers/ns/profiles_controller.rb 

我想那是ns_controller.rb「從應用程序控制器「ns_controller.rb」文件我繼承,所以有:

class Ns::NsController < ApplicationController 
    ... 
end 

這是正確的做法嗎?如果我反正在這種情況下...


ROOT_RAILS/config/routes.rb我:

namespace "ns" do 
    resources :profiles 
end 

@profile是ActiveRecord的:

@profile.find(1).name 
=> "Ruby on" 
@profile.find(1).surname 
=> "Rails" 

application_controller.rb我:

class ApplicationController < ActionController::Base 
    @profile = Profile.find(1) 
end 

ns_controller.rb我:

class Ns::NsController < ApplicationController 
    @name = @profile.name 
    @surname = @profile.surname 
end 

... @name@surname變量未設置。 爲什麼?

回答

1

除非有一些你沒有在這裏展示的代碼,你試圖在類本體而不是實例方法中設置一個實例變量,這意味着變量在控制器動作中不可用(它們是實例方法)。

如果你想找到可以繼承方法,你可以做這樣的事情:

class ApplicationController < ActionController::Base 
    def load_profile 
    @profile = Profile.find(params[:id]) 
    end 
end 

class Ns::NsController < ApplicationController 
    before_filter :load_profile 

    def show 
    # @profile assigned a value in load_profile 
    end 
end