7

このエンジンをマウントするメインアプリケーションでこの関数を追加/オーバーライドするために、エンジン内に懸念を作成しようとしています。問題は、エンジンモジュールに懸念を含む問題が発生したことです。Railsはそれを見つけることができないようです。

これは私のpost.rbファイルですapp/models/blorgh/post.rb

module Blorgh
  class Post < ActiveRecord::Base
    include Blorgh::Concerns::Models::Post
  end
end

そして、これは私のpost.rb懸念ですlib/concerns/models/post.rb

「active_support/concern」が必要

module Concerns::Models::Post
  extend ActiveSupport::Concern

  # 'included do' causes the included code to be evaluated in the
  # conext where it is included (post.rb), rather than be 
  # executed in the module's context (blorgh/concerns/models/post).
  included do
    attr_accessible :author_name, :title, :text
    attr_accessor :author_name
    belongs_to :author, class_name: Blorgh.user_class
    has_many :comments

    before_save :set_author

    private
    def set_author
      self.author = User.find_or_create_by_name(author_name)
    end
  end

  def summary
    "#{title}"
  end

  module ClassMethods
    def some_class_method
      'some class method string'
    end
  end
end

テスト/ダミーを実行すると、次のエラーが発生しました: uninitialized constant Blorgh::Concerns

これは私の blorgh.gemspec です:

$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "blorgh/version"


# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "blorgh"
  s.version     = Blorgh::VERSION
  s.authors     = ["***"]
  s.email       = ["***"]
  s.homepage    = "***"
  s.summary     = "Engine test."
  s.description = "Description of Blorgh."

  s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
  s.test_files = Dir["test/**/*"]

  s.add_dependency "rails", "~> 3.2.8"
  s.add_dependency "jquery-rails"

  s.add_development_dependency "sqlite3"
end

誰かがこれで私を助けることができますか?

4

2 に答える 2

0

これは、Rails 3 ではクラスを見つけるために lib ディレクトリが自動的に検索されないために発生します。config.autoload_paths を更新して lib ディレクトリをエンジンに追加するか、consects/models/post.rb を lib ディレクトリから移動して、自動的に見つかる app/models に移動することができます。

于 2013-04-03T01:22:15.780 に答える