0

新しいマウント可能なrails3.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と通信できるように設定する方法を誰かに教えてもらえますか?

4

2 に答える 2

4

答えは、苦痛で単純なものになってしまいました。私のエンジンでは、ブログコントローラー用に次のものがあります。

module Blog
  class BlogsController < ApplicationController

次に、エンジンのアプリケーションコントローラーを調べて、次のことを確認しました。

module Blog
  class ApplicationController < ActionController::Base

問題は、エンジンでapplication_controllerを確認し、何も見つからない場合はメインアプリのapplication_controllerを確認することでした。そのため、これに変更すると、すべてが正常に機能します。

module Blog
  class ApplicationController < ::ApplicationController

別の/より良い/よりエレガントな/ベストプラクティス/その他の解決策をご存知の場合は、ぜひお聞かせください。

于 2011-09-19T18:43:48.863 に答える
0

あなたは調べる必要があります

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

エンジンは、親アプリの拡張のようなものです。したがって、アプリケーションの helper_methods を呼び出すことができるはずです。

マウント可能なアプリは、親アプリから分離されています。マウント可能なアプリを使用していると思います。上記のコマンドを使用して Rails エンジンに変更することを検討してください。

于 2011-12-08T05:12:52.000 に答える