Составные ключи с ActiveScaffold в Ruby On Rails
-
03-07-2019 - |
Вопрос
Я разрабатываю приложение 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