Механизм Rails 3.1: как заставить обработчик application_controller взаимодействовать с application_controller клиентского приложения? - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть новый, монтируемый движок rails 3.1, и мне нужно клиентское приложение, которое является приложением rails, которое будет включать этот движок, для определения общего метода на основе разрешений.

Итак, я хочув контроллере блога моего движка сказать что-то вроде:

before_filter :redirect_unless_admin

И затем я хочу оставить это клиентскому приложению, чтобы определить, кто является администратором.Однако всякий раз, когда я пытаюсь это сделать, я получаю:

NameError in Blog::BlogsController#show

undefined local variable or method `redirect_unless_admin' for #<Blog::BlogsController:0x000001058aa038>

Контроллер моего клиентского приложения выглядит примерно так:

class ApplicationController < ActionController::Base

  # Required by blog engine
  def redirect_unless_admin
    if !logged_in?
      set_session_redirect
      redirect_to login_path, :notice => 'Please log in.'
    elsif !current_user.admin?
      set_session_redirect
      redirect_to root_path, :notice => 'You do not have permission to view this page.'
    end
  end

И в моем контроллере приложения движка у меня есть следующее:

module Blog
  class ApplicationController < ActionController::Base
  end
 end

Может кто-нибудь сказать мне, как настроить его так, чтобы контроллер блога моего движка мог общаться с application_controller моего клиента?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

Ответ оказался болезненным и простым.В моем движке у меня есть следующее для моего контроллера блогов:

module Blog
  class BlogsController < ApplicationController

Затем я посмотрел в контроллере приложения моего движка и увидел это:

module Blog
  class ApplicationController < ActionController::Base

Проблема была в том, что я хотелмой движок, чтобы посмотреть на его application_controller, а затем на application_controller основного приложения, если ничего не было найдено, поэтому я переключился на это, и все прекрасно работает:

module Blog
  class ApplicationController < ::ApplicationController

Если вы знаете другой / лучший / более элегантный / лучшийПрактика / любое решение, я бы хотел услышать это.

0 голосов
/ 08 декабря 2011

вы должны посмотреть на

rails plugin new forum --full        # Engine
rails plugin new forum --mountable   # Mountable App

Движок похож на расширение родительского приложения.Таким образом, вы должны иметь возможность вызывать приложение helper_methods.

Монтируемое приложение изолировано от родительского приложения.Я считаю, что вы используете монтируемое приложение.Изучите приведенные выше команды для перехода на рельсовый двигатель.

...