RailsAdmin - Overview and Best practices

36,139 views

Published on

RailsAdmin presentation for the parisrb meetup.
Overview, best practices, comparison with ActiveAdmin, capybara steps for testing, cancan integration,

Published in: Technology
2 Comments
40 Likes
Statistics
Notes
  • Is video or audio of your presentation posted anywhere?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • It's really great introduction into rails_admin ins-and-outs.
    Even despite the fact that I knew most of it, because I did a couple of projects using rails_admin.

    Did you consider to add a link to this presentation in the rails_admin's wiki page?
    https://github.com/sferik/rails_admin/wiki
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
36,139
On SlideShare
0
From Embeds
0
Number of Embeds
80
Actions
Shares
0
Downloads
176
Comments
2
Likes
40
Embeds 0
No embeds

No notes for slide

RailsAdmin - Overview and Best practices

  1. 1. RailsAdmin Overview & Best practices mercredi 7 août 13
  2. 2. 14 years ago Acceptable in the 90’ mercredi 7 août 13
  3. 3. Data Admin, stand-alone • + Pros • Reliable • Powerful • - Cons • No business rules whatsoever mercredi 7 août 13
  4. 4. mercredi 7 août 13
  5. 5. Data Admin, in the application • + Pros • Leverages the whole application or some parts for business rules etc. • - Cons • No direct (fast) DB administration • Your code? In theory... mercredi 7 août 13
  6. 6. • Admin generator • Immediate startup • Steep learning curve • Extensible • Powerful when leverages Rails Models and Cancan • Admin builder • Slower startup • Simple DSL • Usable • Good for ad-hoc admin building when Models/Cancan rules don’t infer the UI RailsAdmin ActiveAdmin Grain of salt, common sense, etc. mercredi 7 août 13
  7. 7. Pitfall • ActiveAdmin lets you do the work • => with some help from Formtastic :/ • RailsAdmin shortcuts ActiveModel • => Complex custom code laying on the ORMs :/ • But hey! it works®* ActiveModel does not provide anything for associations! * Unless you screwed up your models associations definitions mercredi 7 août 13
  8. 8. Minimum installation • rails new new_app • rails g model blog::post title:string content:text • rails g model blog::comment content:text post:belongs_to • gem ‘rails_admin’ • mount RailsAdmin::Engine => ‘’ mercredi 7 août 13
  9. 9. Big picture • Actions • Map routing to templates and controller • Sections • Map field configuration to each action • Fields • Handle fields configurations mercredi 7 août 13
  10. 10. Actions-Sections CRUD mapping • new => new < edit < base • edit => update < edit < base • edit/new nested => nested < edit < base • edit/new modal => modal < edit < base • index => list < base • export => export < base mercredi 7 août 13
  11. 11. Example mercredi 7 août 13
  12. 12. The issue... • Never-ending list of section/fields definitions mercredi 7 août 13
  13. 13. Solutions • Use configure as much as you can (doesn’t force the field list in opt-in mode) • Use order • Move each model configuration to a rails_admin block in class definition • Hide fields you don’t need instead of listing them (less overhead usually) mercredi 7 août 13
  14. 14. Associations mercredi 7 août 13
  15. 15. The associations • has_many => nested • has_one => nested • belongs_to => modal • has_many :through => modal • has_and_belong_to_many => modal • It makes sense® mercredi 7 août 13
  16. 16. Back to our models... mercredi 7 août 13
  17. 17. You tell your ORM about it mercredi 7 août 13
  18. 18. Stay on the Golden path • Convention over configuration! • RailsAdmin gets as much intel as it can from your models: • Fields • Associations • Validations • Don’t configure RailsAdmin when you can tweak your app to Rails’ best standards! mercredi 7 août 13
  19. 19. But wait! Admin! Passwords and stuff! • gem ‘devise’ • rails g devise:install • rails g devise user • rails g migration add_user_id_to_blog_posts user:belongs_to • config/rails_admin.rb: mercredi 7 août 13
  20. 20. Who am I? mercredi 7 août 13
  21. 21. This is called authentication. Do you have authorization? • gem ‘cancan’ • rails g migration add_profile_to_users profile:string • config/rails_admin.rb: • rails g cancan:ability mercredi 7 août 13
  22. 22. Some other profiles • Admin can do anything • Writer can • access rails_admin • access the dashboard • CRUD Blog::Post that he owns • for new posts, user_id will be forced to his id mercredi 7 août 13
  23. 23. Ok, what do I get for my writers ? mercredi 7 août 13
  24. 24. At last, some RailsAdmin field configuration! mercredi 7 août 13
  25. 25. Deal with serialized fields • rails g migration add_metadata_to_blog_posts metadata:text • models/blog/post.rb mercredi 7 août 13
  26. 26. Now what? • It’s error prone :( • It’s ugly :( • It’s not user friendly :( • It’s dangerous :( • What should I do? mercredi 7 août 13
  27. 27. Use some ‘virtual’ fields? • You don’t need your object to respond to ‘block’ ! • You can create RailsAdmin fields out of the blue • You just need to define value and parse_input methods (in & out the form) • allowed_methods lets you modify the mass-assignable params on the object (safety) mercredi 7 août 13
  28. 28. Say I need another one like ‘block’? • Let’s create a metadata RailsAdmin field type, in our application • lib/rails_admin/metadata.rb mercredi 7 août 13
  29. 29. Time to leverage No pollution in the model! mercredi 7 août 13
  30. 30. Some actions? mercredi 7 août 13
  31. 31. I need to publish my posts! Define an action, then use it mercredi 7 août 13
  32. 32. Then the view part, simple stuff The view goes to rails_admin/ main/publish.slim Then add some translations for proper integration mercredi 7 août 13
  33. 33. I’m in trouble • Check that your models are ok (rails c) • bundle open rails_admin • trace @abstract_model, @object in actions • trace @abstract_model, bindings[:object] in fields mercredi 7 août 13
  34. 34. Someone said I need tests, I probably need tests, did I say I need tests? https://github.com/sferik/rails_admin/wiki/Rspec-with-capybara-examples mercredi 7 août 13
  35. 35. Thanks for listening! Full example code https://github.com/bbenezech/blog_admin benoit.benezech@gmail.com @bbenezech github/Skype/twitter Freelance mercredi 7 août 13

×