문제

레거시 데이터베이스와 함께 작동하고 멋진 CRUD 인터페이스에 ActivesCaffold 플러그인을 사용하는 ROR 응용 프로그램을 개발하고 있습니다.

그러나 레거시 DB의 테이블 중 하나에는 복합 기본 키가 있습니다. 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'

모델 코드에있는 동안 SMTH는 다음과 같습니다.

set_primary_keys :contact, :type

ActivesCaffold를 사용하여 합성 키 기능을 얻을 수있는 방법을 알고 있습니다.

도움이 되었습니까?

해결책

나는 당신의 최선의 방법이 그것을 확인하는 것일 것이라고 생각합니다 ActivesCaffold Google Group ActivesCaffold의 핵심 개발자가 모니터링하고 궁극적으로 문제를 해결하고 플러그인을 사용하는 복합 키가 ActivesCaffold에서 작동하지 않는 이유를 설명 할 수 있습니다.

행운을 빕니다. Google 그룹의 결과를 얻으려면 후속 조치를 게시하십시오 (이전에 게시 한 후 피드백을 매우 빨리 받았습니다).

내가 찾은 한 가지 빠른 결과 이것.

내가 한 일은 상속하지 않는 외관 수업을 만드는 것이 었습니다.
ActiveRecord 그런 다음 "ID"를 기본 키로 표시합니다. 내 경우에는
기본 키는 다른 데이터에서 계산되었으며 결과적으로 변경 될 수 있습니다.
편집의 경우, 나는 몇 곳에서 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