Rails3 Engine: Gems (paperclip и inherited_resources) не загружены - PullRequest
1 голос
/ 28 июня 2011

В моем gemfile двигателя rails3 я добавил:

gem 'paperclip'
gem 'inherited_resources'

Я также добавил это в свой gemspec:

s.add_dependency "paperclip"
s.add_dependency "inherited_resources"

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

Using /Users/ynkr/.rvm/gems/ruby-1.9.2-p180 with gemset rails31beta
ynkr % rails c
/Users/ynkr/.rvm/gems/ruby-1.9.2-p180@rails31beta/gems/actionpack-3.1.0.rc4/lib/action_dispatch/http/mime_type.rb:101: warning: already initialized constant YML
Loading development environment (Rails 3.1.0.rc4)
ruby-1.9.2-p180 :001 > b=Blog::Blog.first 
  Blog::Blog Load (0.2ms)  SELECT `blogs`.* FROM `blogs` LIMIT 1
 => #<Blog::Blog id: 1, user_id: 1, context_id: 2, title: "Cmd Line Blog Title", title_for_url: "cmd-line-blog-title", teaser: "This is the teaser for the command line blog", content: "Some content for the cmd line blog", created_at: "2011-06-28 06:06:55", updated_at: "2011-06-28 06:06:55"> 
ruby-1.9.2-p180 :002 > b.photos
NoMethodError: undefined method `has_attached_file' for #<Class:0x00000102a57fc8>
    from /Users/ynkr/.rvm/gems/ruby-1.9.2-p180@rails31beta/gems/activerecord-3.1.0.rc4/lib/active_record/base.rb:1078:in `method_missing'
    from /websites/gems/blog/app/models/blog/photo.rb:6:in `<class:Photo>'
    from /websites/gems/blog/app/models/blog/photo.rb:1:in `<top (required)>'
    from /Users/ynkr/.rvm/gems/ruby-1.9.2-p180@rails31beta/gems/activesupport-3.1.0.rc4/lib/active_support/dependencies.rb:452:in `load'

ОК, поэтому, похоже, метод has_attached_file из гема скрепки не найден. Зачем? Я не уверен.

Перейдя к параметру inherited_resources, я изменил сгенерированный скаффолдом контроллер, чтобы он выглядел следующим образом:

class Blog::ContextsController < InheritedResources::Base
  before_filter :redirect_unless_admin
end

и загрузите страницу индекса для того, к чему меня приветствуют (в журналах):

Started GET "/blog/contexts" for 127.0.0.1 at 2011-06-28 12:06:25 -0700

ActionController::RoutingError (uninitialized constant InheritedResources):

Rendered /Users/ynkr/.rvm/gems/ruby-1.9.2-p180@rails31beta/gems/actionpack-3.1.0.rc4/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)

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

1 Ответ

1 голос
/ 29 июня 2011

Вам необходимо указать каждый драгоценный камень в вашем движке в файле инициализатора, например.lib/<your_engine_name>/engine.rb

Немного больше объяснений здесь ...

Rails Engine - Gems-зависимости, как их загрузить в приложение?

...