thoughtbot / administrate

A Rails engine that helps you put together a super-flexible admin dashboard.
http://administrate-demo.herokuapp.com
MIT License
5.9k stars 1.13k forks source link

view variants support #2578

Open hksk opened 6 months ago

hksk commented 6 months ago
$ ls -lah app/views/admin/courses
drwxr-xr-x  7 casa  staff   224B May  4 02:17 .
drwxr-xr-x  4 casa  staff   128B May  4 01:00 ..
-rw-r--r--  1 casa  staff   2.0K May  4 02:38 show+student.html.erb
-rw-r--r--  1 casa  staff   2.0K May  4 02:38 show.html.erb
# main controller
    def show
     variant = ""
     if !request.variant.nil? 
       variant = "+#{request.variant.to_s}"
     end
      render render "show#{variant}"locals: {
        page: Administrate::Page::Show.new(dashboard, requested_resource)
      }
    end
# generated controller
    def show
      request.variant = :student
      super
    end
nickcharlton commented 2 months ago

I'm not familiar with view variants. Is this a Rails feature we're not supporting? If so, could you link to the docs so we can plan out how to support it?

Thrizian commented 1 month ago

I'm not familiar with view variants. Is this a Rails feature we're not supporting? If so, could you link to the docs so we can plan out how to support it?

https://guides.rubyonrails.org/layouts_and_rendering.html#the-variants-option

goosys commented 4 weeks ago

@Thrizian I didn’t know about variant —this was really helpful to learn!

@hksk I tried it out briefly, and it worked without needing any additional modifications. Here’s an example of how it’s used:

touch app/views/admin/courses/show.html+student.erb
module Admin
  class CoursesController < Admin::ApplicationController
    before_action :with_variant, only: %i[show]
    private def with_variant
      if SOME_CONDITION
        request.variant = :student
      end
    end