Question

Je développe une application RoR qui fonctionne avec une base de données existante et utilise le plug-in ActiveScaffold pour une interface CRUD élégante.

Cependant, l'une des tables de ma base de données existante possède une clé primaire composite. J'ai essayé d'utiliser le plug-in Composite Keys pour le gérer, mais il semble y avoir des conflits avec ACtiveScaffold: le message d'erreur suivant s'affiche:

ActionView::TemplateError (Could not find column contact,type) on line #3 of ven
dor/plugins/active_scaffold/frontends/default/views/_form.rhtml:
1: <ol class="form" <%= 'style="display: none;"' if columns.collapsed -%>>
2:   <% columns.each :for => @record do |column| -%>
3:   <% if is_subsection? column -%>
4:   <li class="sub-section">
5:     <h5><%= column.label %> (<%= link_to_visibility_toggle(:default_visible =
> !column.collapsed) -%>)</h5>
6:     <%= render :partial => 'form', :locals => { :columns => column } %>

vendor/plugins/active_scaffold/lib/data_structures/sorting.rb:16:in `add'

tout en ayant dans le code du modèle smth comme:

set_primary_keys :contact, :type

J'apprécie énormément toute idée de la possibilité d'obtenir des clés composites avec ActiveScaffold.

Était-ce utile?

La solution

Je pense que votre meilleur choix est peut-être de vérifier le le groupe Google ActiveScaffold , qui est surveillé par le noyau. Les développeurs d’ActiveScaffold pourront ainsi résoudre votre problème et expliquer pourquoi les clés composites associées au plug-in ne fonctionnent pas avec ActiveScaffold.

Je vous souhaite bonne chance et veillez à poster un suivi si vous obtenez des résultats du groupe Google (sur lesquels j'ai déjà posté et que j'ai reçu très rapidement des commentaires).

Un résultat rapide que j'ai trouvé est this .

  

Ce que j'ai fait était de créer une classe de façade qui n'hérite pas de
  ActiveRecord crée ensuite le & id; id " affiche la clé primaire. Dans mon cas le
  la clé primaire a été calculée à partir d'autres données et pourrait donc être modifiée
  d'une édition, j'ai donc dû remplacer ActiveScaffold à quelques endroits pour
  autoriser le changement de clé primaire après une mise à jour. Mais dans l'ensemble
  cela fonctionne et est assez simple. Commencez avec une classe vide
  et juste résoudre les messages qui ne sont pas compris. Dans votre cas, vous
  pourrait même simplement rediriger tous les messages vers un ActiveRecord encapsulé tout en
  remplacer les méthodes id et id = et filtrer les méthodes [] et [] =.

Cela peut faire l'affaire pour vous.

Autres conseils

Non, je n'ai reçu aucune réponse du groupe et je ne suis pas sûr qu'ActiveScaffold soit encore activement maintenu.

Après avoir joué avec ActiveScaffold pendant un certain temps, j'ai fini par implémenter ma propre interface CRUD à partir de rien.

Je travaille avec des modèles en lecture seule et j'utilise ActiveScaffold sur une base de données héritée.

L'astuce consistait à remplacer le champ "id" par défaut dans le modèle et à renvoyer une chaîne PK concaténée.

Si cela vous suffit, alors voilà:

  class CPKReadonlyModel < ActiveRecord::Base
    set_primary_key :id_one # only half of it, but id overridden below...

    def id
      self.id_one.to_s + ',' + self.id_two.to_s
    end

    def readonly?
      true
    end

    def before_destroy
      raise ActiveRecord::ReadOnlyRecord
    end

    def delete
      raise ActiveRecord::ReadOnlyRecord
    end

    def self.delete_all
      raise ActiveRecord::ReadOnlyRecord
    end
  end

Dans le bloc de configuration actif_scaffold, le contrôleur dispose des éléments suivants:

  config.actions.exclude :create, :update, :delete
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top