Вопрос

Я разрабатываю приложение RoR, которое работает с устаревшей базой данных и использует плагин ActiveScaffold для модного интерфейса CRUD.

Однако в одной из таблиц моей прежней БД есть составной первичный ключ. Я пытался использовать плагин Composite Keys для его обработки, но, похоже, он конфликтует с ACtiveScaffold: я получаю следующую ошибку:

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'

имея в коде модели что-то вроде:

set_primary_keys :contact, :type

Я очень ценю любую идею о том, как получить функцию составных ключей с помощью ActiveScaffold.

Это было полезно?

Решение

Я думаю, что вашей лучшей ставкой может быть проверка ActiveScaffold Google Group , поскольку она отслеживается ядром разработчики ActiveScaffold, и они в конечном итоге смогут решить вашу проблему и объяснить, почему составные ключи с плагином не будут работать с ActiveScaffold.

Удачи и обязательно опубликуйте продолжение, если вы все же получите результаты от группы Google (о которой я писал ранее и очень быстро получил отзыв).

Одним из быстрых результатов, который я нашел, был

Другие советы

Нет, я не получил никакого ответа от группы, и я не уверен, что ActiveScaffold еще активно поддерживается.

После некоторого времени игры с ActiveScaffold я в итоге реализовал свой собственный интерфейс CRUD с нуля.

У меня это работает, с моделями только для чтения, использующими ActiveScaffold в устаревшей БД.

Хитрость заключалась в том, чтобы переопределить поле id по умолчанию в модели и вернуть объединенную строку PK.

Если это достаточно хорошо, тогда идите:

  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

Контроллер имеет следующее в блоке конфигурации active_scaffold:

  config.actions.exclude :create, :update, :delete
scroll top