2016-04-17 1 views
1

Je me suis bloqué avec cela pendant des jours et j'ai essayé tout ce que je pouvais penser. Essayer de modifier une application créée par quelqu'un d'autre en utilisant rails_admin. Tout ce que je veux faire est de faire un champ, Course dans la liste pour être triable par ordre alphabétique et interrogeable. J'ai un modèle home_study_registration.rails_admin comment rendre une colonne triable et interrogeable

  • HomeStudyRegistration hérite de ClassRegistration
  • class_registration has_one: Bien sûr,: par =>: course_class
  • : course_class est un modèle abstrait qui belongs_to: cours
  • : cours a une chaîne d'attribut :title qui maintenant affiche dans la table et, lorsque cliqué navigue à la vue show de ce cours.

Ce dernier est ce que j'essaie de modifier. Est-il possible de rendre cette colonne triable? Aussi, comment puis-je ajouter un filtre pour rechercher par l'attribut :title? Ceci est mon modèle home_study_registration.rb:

class HomeStudyRegistration < ClassRegistration 
    default_scope { joins(:course_class, :course, :user).where('course_classes.class_type = ?', "home").readonly(false) } 

    delegate :full_name, :email, :profession, :ce_state, :ce_number, :to => :user, :prefix => true 
    delegate :eacc, :to => :course_class 
    delegate :title, :to => :course 

    RailsAdmin.config do |config| 
    config.model HomeStudyRegistration do 
     navigation_label 'Course Management' 
     parent HomeStudy 
     label 'Manage Home Study' 

     list do 
     sort_by :created_at 
     filters [:created_at, :status] 

     field :user do 
      label 'name' 
      column_width 120 
     end 

     field :cart do 
      label 'order' 
      column_width 50 
     end 
     field :user_ce_state do 
      label 'Lic. St.' 
      column_width 25 
      pretty_value do 
      if bindings[:object].licenses.any? 
       bindings[:object].licenses.order(:created_at).collect{ |l| l.state }.join("<br>").html_safe 
      else 
       bindings[:object].user_ce_state 
      end 
      end 
     end 
     field :user_profession do 
      label 'Lic. Type' 
      column_width 100 
      pretty_value do 
      if bindings[:object].licenses.any? 
       bindings[:object].licenses.order(:created_at).collect{ |l| l.show_profession }.join("<br>").html_safe 
      else 
       bindings[:object].user_profession 
      end 
      end 
     end 
     field :user_ce_number do 
      label 'Lic. ' 
      column_width 80 
      pretty_value do 
      if bindings[:object].licenses.any? 
       bindings[:object].licenses.order(:created_at).collect{ |l| l.number }.join("<br>").html_safe 
      else 
       bindings[:object].user_ce_number 
      end 
      end 
     end 
     field :eacc do 
      column_width 60 
     end 
     field :course do 
      label 'Course' 
      column_width 200 
     end 
     field :score do 
      column_width 55 
     end 
     field :status, :enum do 
      column_width 55 
      enum do 
      ['Active', 'Completed', 'Expired', 'Errors'] 
      end 
     end 
     field :exam_completed_at do 
      label 'Completed' 
     end 
     field :created_at do 
      label 'registered' 
     end 

     end 

     edit do 
     field :course_class do 
      associated_collection_scope do 
       # bindings[:object] & bindings[:controller] are available, but not in scope's block! 
       Proc.new { |scope| 
        scope = scope.where(class_type: "home") 
       } 
      end 
     end 
     field :user 
     field :status, :enum do 
      enum do 
      ['Active', 'Completed', 'Expired', 'Errors'] 
      end 
     end 
     field :exam_completed_at do 
      label 'Completed' 
     end 
     field :exam_attempts 
     field :score 
     end 

     export do 
     field :user_full_name 
     field :user_email 
     field :cart_id do 
      label 'Order' 
     end 
     field :user_ce_state do 
      label 'Lic. state' 
     end 
     field :user_profession do 
      label 'Lic. type' 
     end 
     field :user_ce_number do 
      label 'Lic. #' 
     end 
     field :eacc 
     field :course_title 
     field :score 
     field :status 
     field :exam_completed_at do 
      label 'Completed' 
     end 
     field :created_at do 
      label 'Registered' 
     end 
     end  
    end 
    end 
end 

Si nécessaire, je peux abréger cela. Mais j'ai pensé qu'il pourrait être utile de montrer le contexte des autres méthodes et domaines. La région que je me concentre sur a été:

... 

list do 
     sort_by :created_at 
     filters [:created_at, :status] 

... 

     field :course do 
      label 'Course' 
      column_width 200 
     end 

... 

J'ai essayé d'ajouter sortable: true et sortable :title et toutes les variantes de tag filtrables et consolidations « de pretty_value ». Ce problème a drastiquement raccourci ma vie. Puis-je avoir une aide s'il vous plait?

Merci

+1

Je ne l'ai pas utilisé rails_admin avant. Je suppose qu'il a ses propres méthodes pour trier les colonnes? À quoi ressemblent les données dans la colonne du cours? Quel type de données est-ce? – Lumbee

+1

Merci @Lumbee, la colonne affiche l'attribut ': title' pour le modèle Course, qui est une chaîne. Ouais, le rails_admin DSL est vraiment abstrait et beaucoup de la documentation se contredit. Je suis en mesure d'obtenir 'sortable' travaillant sur la colonne maintenant en ajoutant une ligne' sortable {: title} 'dans le bloc" field course do ", dont FYI n'est pas * dans * les syntaxes décrites dans les docs . Allez comprendre. Malheureusement, impossible d'obtenir un travail interrogeable/interrogeable, car l'ajout d'une balise similaire produit une erreur PG (non définie "FROM"). Probablement parce que * Course * est le petit-fils de * ClassRegistration *. Frustrant. –

Répondre

0
field :course do 
     label 'Course' 
     column_width 200 
     sortable "courses.name" #courses.lastname or courses.firstname 
    end