问题标签 [virtus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
49 浏览

ruby-on-rails - Rails 中的 fields_for 和 POROs (Virtus)

我有几个 virtus 对象:

我想form_for在新的视图计算上使用:我在视图中尝试了这段代码

但它不起作用,因为输入元素呈现为

代替

我设法做到这一点的唯一方法是:

有什么方法可以在这里正确使用form_for吗?

0 投票
1 回答
130 浏览

ruby-on-rails - 根据相关对象的数据在运行时定义属性

我正在构建一个应用程序,其中用户是Organisation. 一个组织有很多Lists,而后者又拥有很多ListItems。

现在,我希望管理员用户能够根据他们所属的组织(或者更确切地说,在他们的列表所属的组织上)指定列表项上可用的属性,而无需接触任何代码。

到目前为止,在定义未绑定到数据库中特定列的属性时,我使用了document_serializable,这是一个漂亮的小 gem(基于virtus),它将虚拟属性序列化为 db 中的 JSONB 列。我喜欢这种方法,因为我获得了 virtus 的所有优点(类型、强制、验证等),并且因为数据最终位于 JSONB 列中,这意味着可以相对轻松地快速加载、索引和搜索.

在动态添加这些用户定义的属性时,我想继续使用这种方法。所以我想做类似的事情:

WhereOrganisation#list_attributes返回属性名称及其关联类型的用户定义哈希,例如,可能如下所示:

正如您可能已经猜到的那样,这不起作用,因为organisation.list_attributes.each实际上是在 的上下文中运行的ListItem,它是 的实例Class,并且Class没有#organisation方法。我希望以一种有意义的方式措辞1

我试过使用after_initialize,但在对象生命周期的那个时刻,#attribute是由ActiveRecord::AttributeMethods::Read而不是拥有的DocumentSerializable::ClassMethods,所以这是一种完全不同的方法,我不知道我是否仍然可以访问我需要的那个,以及它是否甚至可以工作.

另一种选择是以某种明确的方式找到有问题的组织,Organisation#find-style,但老实说,我不知道我应该在哪里存储必要的信息。

所以,我的问题:在实例化(初始化或加载2)记录时,有没有办法可以检索存储在其关系之一的数据库列中的哈希?或者我是否试图以一种完全被误导的方式来构建它,如果是这样,我应该怎么做呢?


1澄清一下,如果我像这样直接使用哈希:

它会起作用,我的问题只是在这个较早的时间点获得记录的关系。

2我的理解是,每当从数据库创建或加载该类型的记录时,Rails 都会运行模型的代码,这意味着每次发生这种情况时都会重新定义虚拟属性,这就是为什么我要问如何在这两种情况下执行此操作.

0 投票
1 回答
34 浏览

ruby-on-rails - 'books=(books)' 方法在做什么?

我加入了 Rails 团队并维护代码。有些对象是由 Gem virtus 控制的,但我真的不明白,就像下面的代码在做什么。

我理解属性'latest_book'可以从书籍中收集最新书籍的结果,但为什么可以这样做?'books=(books)' 在做什么?为什么“超级书籍”在这里?

你可以帮帮我吗?