質問

レガシーデータベースで動作し、派手な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で複合キー機能を取得する方法についてのアイデアを高く評価しています。

役に立ちましたか?

解決

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

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

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

  

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

それはあなたのためにトリックをするかもしれません。

他のヒント

いいえ、グループからの返信はありません。ActiveScaffoldがアクティブに維持されているかどうかはわかりません。

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

レガシー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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top