1

レガシーデータベースで動作し、派手な CRUD インターフェイスに ActiveScaffold プラグインを使用する RoR アプリケーションを開発しています。

ただし、レガシー データベースのテーブルの 1 つに複合主キーがあります。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 で複合キー機能を取得する方法を考えていただければ幸いです。

4

3 に答える 3

2

ActiveScaffold のコア開発者によって監視されているActiveScaffold Google グループを確認するのが最善の策であり、最終的に問題を解決し、プラグインを使用した複合キーが ActiveScaffold で機能しない理由を説明できると思います。

幸運を祈ります。Google グループから結果が得られた場合は、必ずフォローアップを投稿してください (以前に投稿したことがあり、すぐにフィードバックを受け取りました)。

私が見つけた1つの簡単な結果はこれでした。

私がしたことは、ActiveRecord から継承しないファサード クラスを作成し
、「id」に主キーを表示させることでした。私の場合、
主キーは他のデータから計算され
、編集の結果として変更される可能性があるため、いくつかの場所で ActiveScaffold をオーバーライドして
、更新後に主キーを変更できるようにする必要がありました。しかし、全体として
機能し、かなり簡単です。空のクラス
から始めて、理解できないメッセージを解決してください。あなたの場合 、id および id= メソッドを置き換え、[] および []= メソッドをフィルタリングし
ながら、ラップされた ActiveRecord にすべてのメッセージをリダイレクトすることさえできます。

それはあなたのためにトリックを行うかもしれません.

于 2008-10-21T17:18:12.470 に答える
0

私は、従来のDBで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
于 2012-10-05T22:11:32.357 に答える
0

いいえ、グループから返信を受け取っていません。ActiveScaffold がまだアクティブに維持されているかどうかもわかりません。

ActiveScaffold でしばらく遊んだ後、独自の CRUD インターフェイスをゼロから実装することになりました。

于 2008-10-27T10:30:14.187 に答える