2012-12-14 3 views
0

몇 가지 모델을 적절하게 함께 묶으려고 Hobo 앱을 만들고 있습니다.Hobo에서 저장되지 않은 객체의 조상 객체를 가져옵니다.

Activity 개체에 많은 Page 개의 자식이 있습니다. 또한 많은 어린이가 DataSet 명 있습니다.

Page 개체에는 여러 가지 종류의 자식이 있습니다. Widget 어린이에 대해 이야기하겠습니다.하지만 동일한 문제가있는 여러 유형이 있습니다. Widget의 인스턴스는 Page에 속하지만 belongs_to 관계와 DataSet이 있습니다. 중요한 점은 다음과 같습니다. DataSetActivity에 속해야합니다. 주어진 @widget에 대한 그래서 :

@widget.page.activity === @widget.data_set.activity 

은 저장에 대한 검증과 모델이 제약 조건을 적용 할 정도로 간단합니다. 트릭은 Widget의 형태 만 나는이 같은 태그를 사용하여 기존 개체에 대한 작업을 얻을 수 있었다 현재 Activity

에 대한 DataSet들 포함 사용할 수 DataSet s의 선택 메뉴에서, 제시 :

&this 또는 &this.page 중 하나가 아직 설정되지 않았기 때문
<data_set-tag: options="&DataSet.activity_is(&this.page.activity)" /> 

은 그러나, 새로운Widget, 이것은, messily 실패합니다. /pages/:page_id/widgets/new과 같은 페이지 ID가 포함 된 경로의 경우에도 ActivityDataSet의 목록 범위에 실제로 추가 할 수 없습니다.

적절한 레일이라면 또는 비슷한 종류의 컨트롤러로 볼 수있는 Activity을 만들 겠지만 호보에서는 컨트롤러가 95 %의 Magic ™ 및 I 어디서부터 시작해야할지 모르겠다. 어떤 지식이 현재 Activity인지 어딘가에 있어야합니다. 내가 어떻게 알아낼 수 있니?

이것은 Hobo 1.3.x on Rails 3.0.x입니다.


ETA이 기존 Widget의 편집을 위해 일하는,

<extend tag="form" for="Widget"> 
    <old-form merge> 
    <field-list: fields="&this.field_order"> 
     <data_set-tag: options="&DataSet.activity_is(&this.page.activity)" /> 
    </field-list> 
    </old-form> 
</extend> 

은 제가 위에서 말했듯이,하지만 Widget의 새로운 없습니다 : 오류를 생성하는 코드는 다음처럼, Widgetform 태그에 ; 오류는 undefined method 'page' for nil:NilClass입니다. Bryan Larsen의 답변은 &this.page이 null이 아니어야 함을 나타냅니다.

답변

0

결국에는 구문으로 밝혀졌습니다. 대신

<data_set-tag: options="&DataSet.activity_is(&this.page.activity)" /> 

의 I합니다 (@주의)

<data_set-tag: options="&DataSet.activity_is(@this.page.activity)" /> 

이 필요했습니다.

우리는 실제로 도우미 메서드에이했다, 그래서 최종 코드는

<data_set-tag: options="&DataSet.activity_is(activity_for(@this))" /> 
1

이 질문을 Hobo Users 메일 링리스트에 게시하려고 한 것 같습니다. 검토 메시지가 표시되지만 게시물이 게시 된 것으로 보이지 않으며이를 통해 찾을 수 없습니다. 다시 게시 해보십시오. 목록에 Hobo 태그를 모니터링하지 않는 유용한 사람들이 있습니다.

호보 1.3에서는 새로운 액션이 AJAX 부분을 지원하지 않으므로 실제로 많은 마법이 없습니다.당신은 당신 자신과 함께 작업을 대체 할 수

def new_for_page 
    @activity = Activity.find(...) 
    @page = Page.find(params[:page_id]) 
    @widget = @page.widgets.new 
end 

위에서 언급 한 약간의 마법이있다 : 당신은 또한 this에 할당 할 @widget에 할당 WidgetsController에 있다면.

하지만 당신이 말했듯이, 지식은 분명히 어딘가에 있으며 사용자 지정 컨트롤러 작업이 필요하지 않아야합니다.

이 진술은 잘못된 것 같습니다 : 그러나 새 위젯의 경우 이는 & 또는 & this.page가 아직 설정되지 않았기 때문에 지저분하게 실패합니다.

소유자 행동을 제대로 사용하고있는 것으로 보입니다. /pages/:page_id/widgets/new이 경로입니다. widgets_controller에서는 new_for_page 액션입니다. new 또는 new_for 작업에서 this은 저장되지 않은 개체 버전으로 설정됩니다. 귀하의 행동에서 그것은 Page.find(params[:page]).widgets.new과 동등하게 만들어 졌음에 틀림 없습니다. 즉, thisthis.page을 채워야합니다.

나는 당신이 진술서를 허공에서 만들어 내지 않았을 것이라고 확신합니다. 그래서 다른 일이있을 것입니다.

+0

나는 호보 사용자의 메일 링리스트에 게시하려고하지 않았다; 나는 놀랐지 만 나는 존재하지 않았다. 어쩌면 자동으로 방향이 바뀌었을까요? 어쨌든,이 답변은 나에게 몇 가지 발판을 제공합니다. 감사합니다! 나는 조금 돌아와서 성공을보고하거나 나의 질문을 다듬을 것이다. – pjmorse

+0

내가이 답변에서 배운 첫 번째 일은 : 나는 '이'이 무엇인지 이해하지 못했거나 이해하지 못했다. (나는 건설을 이해하지만, 나는 호보가 설정 한 것을 항상 이해하지는 않는다.) – pjmorse

+0

: S 글쎄, 나는 '이 thispage.activity' *가 작동해야한다고 동의하지만, 그렇지 않다. 우리의 최근 전략은'& this '를 인수로 취해 적절한'Activity'를 반환하는'app/helpers/application_helper.rb'의 도우미 였지만'& this'를 인수로 사용하면 "잘못된 인수 수 (0에 1). " Grrr ... – pjmorse

관련 문제