首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Hobo中获取未保存对象的祖先对象

在Hobo中获取未保存对象的祖先对象
EN

Stack Overflow用户
提问于 2012-12-14 21:31:11
回答 2查看 74关注 0票数 0

我正在致力于一个霍波应用程序,试图把几个模型正确地联系在一起。

Activity对象有许多Page子对象。他们也有许多DataSet孩子。

Page对象有几种不同的子对象。我们将讨论Widget子项目,但是有几种类型具有相同的问题。Widget的实例属于Page,但也与DataSetbelongs_to关系。重要的一点是:DataSet必须属于包含的Activity。所以对于任何给定的@widget

代码语言:javascript
复制
@widget.page.activity === @widget.data_set.activity

在模型中通过对保存进行验证,可以很容易地执行此约束。诀窍是,在Widget的表单中,呈现一个可供选择的DataSet菜单,其中只包含当前ActivityDataSet

我能够使用这样的标记来实现现有对象的工作:

代码语言:javascript
复制
<data_set-tag: options="&DataSet.activity_is(&this.page.activity)" />

然而,对于一个新的Widget,这失败的混乱,因为&this&this.page还没有设置。即使是包含页面ID的路由(如/pages/:page_id/widgets/new ),我也无法真正获得Activity来对DataSet的列表进行范围调整。

如果这是正确的Rails,我会进入相关的控制器方法,并将Activity作为@activity或类似的东西提供给视图,但是在Hobo中,控制器似乎是95%的Magic™,我不知道从哪里开始。Activity当前的知识一定存在于某个地方;我如何才能把它弄出来?

这是在Rails 3.0.x上的Hobo 1.3.x。

ETA:产生错误的代码位于用于formWidget标记中,如下所示:

代码语言:javascript
复制
<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,而不是新的Widget;错误是undefined method 'page' for nil:NilClass。Bryan的回答似乎表明&this.page不应该是空的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-20 14:29:26

最后,结果是语法问题。而不是

代码语言:javascript
复制
<data_set-tag: options="&DataSet.activity_is(&this.page.activity)" />

我需要

代码语言:javascript
复制
<data_set-tag: options="&DataSet.activity_is(@this.page.activity)" />

(注意@)。

实际上,我们把它变成了一个助手方法,所以最后的代码是

代码语言:javascript
复制
<data_set-tag: options="&DataSet.activity_is(activity_for(@this))" />
票数 0
EN

Stack Overflow用户

发布于 2012-12-17 14:40:43

看起来你想把这个问题发到“霍波”用户的邮件列表上--我收到了一条温和的信息,但你的帖子似乎没有被发布,我也找不到它让它通过。请试着重新发布它,列表中有几个乐于助人的人在这里不监控霍波标签。

在Hobo 1.3中,新的动作不支持部分AJAX,因此实际上没有什么神奇之处。您可以用自己的操作替换该操作:

代码语言:javascript
复制
def new_for_page
  @activity = Activity.find(...)
  @page = Page.find(params[:page_id])
  @widget = @page.widgets.new
end

上面引用了一点魔力:如果您在WidgetsController中,分配给@小部件也会分配给this

但是正如您所说的,知识显然在某个地方,您的自定义控制器操作不应该是必要的。

这条语句似乎是错误的:然而,对于一个新的Widget来说,这失败得非常糟糕,因为这两种方法都还没有设置好&它或&this.page还没有设置。

看起来你在正确地使用所有者操作。/pages/:page_id/widgets/new是路线。在widgets_controller中,它是new_for_page动作。在新的或new_for操作中,this设置为对象的未保存版本。在您的操作中,应该使用等效于Page.find(params[:page]).widgets.new的方法创建它。换句话说,应该同时填充thisthis.page

我相信你不是凭空发表声明的,所以可能还有别的事情要做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13886525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档