Составные ключи с ActiveScaffold в Ruby On Rails - PullRequest
1 голос
/ 21 октября 2008

Я занимаюсь разработкой приложения 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.

Ответы [ 3 ]

2 голосов
/ 21 октября 2008

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

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

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

Я создал класс фасада, который не наследуется от
ActiveRecord тогда заставляет "id" показывать первичный ключ. В моем случае
Первичный ключ был вычислен из других данных и мог измениться в результате
редактирования, поэтому мне пришлось переопределить ActiveScaffold в нескольких местах до
разрешить изменение первичного ключа после обновления. Но в целом
это работает и довольно просто. Начните с пустого класса
и просто разрешать сообщения, которые не поняты. В вашем случае вы
может даже просто перенаправить все сообщения в упакованный ActiveRecord, пока
замена методов id и id = и фильтрация методов [] и [] =.

Это может помочь вам.

0 голосов
/ 06 октября 2012

У меня это работает, с моделями только для чтения, использующими 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
0 голосов
/ 27 октября 2008

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

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

...