Как возможно наследование классов в пространствах имен с использованием Ruby on Rails 3? - PullRequest
0 голосов
/ 11 января 2011

В моем приложении RoR3 у меня есть пространство имен, называемое NS1, поэтому у меня есть такая структура файловой системы:

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 Ответ

1 голос
/ 11 января 2011

Если здесь не показан какой-то код, вы пытаетесь установить переменную экземпляра в теле класса, а не метод экземпляра, что означает, что переменная не будет доступна в действиях контроллера (которые являются методами экземпляра) ).

Если вы хотите найти метод find, который может быть унаследован, вы можете сделать что-то вроде этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...