In the
getting started with engines tutorial there seem to be some inconsistencies with section
6.1.3 Implementing Decorator Pattern Using ActiveSupport::Concern.
First of all the tutorial steps (6.1.1, 6.1.2) and (6.1.3) seem to be exclusive, although this is never explicitly stated. Following the tutorial up to 6.1.3 and attempting to start a rails server via 'rails s' results in an error. When removing the code from steps 6.1.1 & 6.1.2 the rails server starts.
When completing the tutorial up to step 6.1 and then following step 6.1.3 there are still some problems: *
After the server is started trying to access the posts index or a posts page the page renders an "uninitialized constant Concerns::Models" error page on the first load and "uninitialized constant Blorgh::Concerns" errors thereafter.
The code for the Concern is labelled as
Blorgh/lib/concerns/models/post
when it should be
Blorgh/lib/concerns/models/post.rb
.
Since the concerns are placed in the lib folder they aren't loaded. One workaround is to place the concern in the engine under app/models/blorgh/concerns/post.rb. Then the include however needs to be changed in MyApp to
Blorgh::Concerns::Post. **
Also the engine's actual post model is labelled as existing in:
Blorgh/app/models/post.rb
when it should be in
Blorgh/app/models/blorgh/post.rb
as that's where it was previously created in the tutorial.
Furthermore the code in the post concern doesn't take into account the "
has_many :comments" and
"class_name: Blorgh.author_class.to_s"/"
Blorgh.author_class.find_or_create_by(name: author_name)" changes from previous steps.
The truncate(text) method requires ActionView::Helpers::TextHelper which the tutorial never mentions to include (this is also a problem for step 6.1.2)
* For reference here are the MyApp and Engine after step 6.1.3 without steps 6.1.1/6.1.2:
https://github.com/lbiedinger/unicorn/tree/tutorial-6.1.3-only /
https://github.com/lbiedinger/blorgh/tree/tutorial-6.1.3-only** For reference here are the MyApp and Engine with the concerns under app/models/concerns/:
https://github.com/lbiedinger/unicorn/tree/concerns /
https://github.com/lbiedinger/blorgh/tree/concernsThere may be a better way to include the concerns in the engine other than putting it under models/blorgh/concerns/, like keeping it in lib/blorgh/concerns, but this doesn't work out of the box obviously, or I'm missing something.
Cheers,
Lutz