我正在研究一个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