我正在研究一個Hobo應用程序,試圖正確地將幾個模型綁定在一起。獲取Hobo中未保存對象的祖先對象
Activity
對象有很多Page
孩子。他們也有很多孩子。
Page
對象有幾種不同的孩子。我們將討論Widget
孩子,但有幾個類型的問題相同。 Widget
的實例屬於Page
,但也與DataSet
有belongs_to
的關係。以下是重要的一點:DataSet
必須屬於包含Activity
。因此,對於任何給定的@widget
:
@widget.page.activity === @widget.data_set.activity
這是很容易執行模型中的這個約束與保存驗證。訣竅是提出,在Widget
的形式,提供DataSet
s的選擇菜單,只包含DataSet
S爲當前Activity
我能得到這個工作使用標籤這樣的現有對象中:
<data_set-tag: options="&DataSet.activity_is(&this.page.activity)" />
但是,對於新Widget
,失敗亂七八糟,因爲無論&this
或&this.page
尚未設置。即使是包含頁面ID的路線,例如/pages/:page_id/widgets/new
,我也無法真正獲得Activity
來確定DataSet
s的列表。
如果這是正確的Rails,我會採用相關的控制器方法,並使Activity
可用於視圖@activity
或類似的東西,但在Hobo控制器似乎是95%Magic™和I不知道從哪裏開始。哪些Activity
是當前的知識必須在某處;我怎麼弄出來的?
這是Rails 3.0.x上的Hobo 1.3.x.
ETA:產生錯誤的代碼是在form
標記爲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
S,但不是新Widget
小號;錯誤是undefined method 'page' for nil:NilClass
。 Bryan Larsen的回答似乎暗示&this.page
不應該爲空。
我並沒有試圖將其發佈到流浪漢用戶的郵件列表;我不知道有一個存在,儘管我沒有感到驚訝。也許它會被某些東西自動重定向?無論如何,這個答案給了我幾個探索的立足點,謝謝!我會回來一點,要麼報告成功,要麼改進我的問題。 – pjmorse
我從這個答案中學到的第一件事:我沒有/不明白'this'是什麼。 (我的意思是,我瞭解建築,但我並不總是明白Hobo的設置。) – pjmorse
:S好吧,我有一些同意,'&this.page.activity' *應該*工作,但不是。我們最新的策略是'app/helpers/application_helper.rb'中的一個幫助器,它將'&this'作爲參數並返回相應的'Activity',但當用'&this'作爲參數調用時,它會說「參數數量錯誤0表示1)「。 Grrr ... – pjmorse