问题标签 [virtual-attribute]

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 投票
1 回答
559 浏览

sql - Rails Getting a running balance with ordered list - summation virtual attribute

I'm trying to get a current balance per transaction, a simple summation (Credit's up to record - Debits up to record) on an ordered list.

The challenge is that transactions are often entered out of order, and the transaction logs are sorted by a "Dated" field (showing the date it should have been entered) and by "credits" first (so that it shows payments before bills on the same day).

The association is sorted:

Data is presented simular to the following

I got this by running the method below in the lease model.

The problem is that I don't want it to get a difference of all the prior through out the date of interest. I want it to get the difference of all the prior through the *current record.

There are no other obvious propertys to do conditions or filters on that I can think of. The best solution that I can think of is an ugly one that probably should get me fired...:

This cannot be the right way to do this?

I'm using Rails 3.2.12, Ruby 1.9.3

Thanks Phil

0 投票
2 回答
902 浏览

ruby-on-rails - 通过虚拟属性选择 Rails 模型

我有两个导轨模型Section& SectionRevision。一个部分主要是一个容器,其中包含与其自身相关的所有修订。因此,大多数属性Section基本上都存储在SectionRevision模型中,因此可以随时恢复到修订历史。

有时我需要从截面模型访问最新版本的属性,所以我创建了一些虚拟属性来解决这个问题。


每个模型都具有这些迁移中定义的属性:

部分:

部分修订:


和模型:

部分修订:

部分:


如您所见Section,有几个虚拟属性,如, parent_section, current_revision& position

现在的问题是我想创建一个虚拟属性,children它选择虚拟属性parent_section.id等于的所有部分self.id。这可能吗?我知道上面的代码不起作用,因为它对不存在的列进行查询 - 而且我不确定如何从模型“Sections”中访问 Model 实例似乎不起作用。

可以根据虚拟属性进行选择吗?


我已经根据 ProGNOMmers 的回答更新了模型并得到以下信息:

情况1:这工作得很好。

情况2:

在情况 2 中,我想section.children返回=> []assub_section.current_revision.parent_section_id = nil而不是section.id

换句话说section.children,应该返回所有Sections位置,.current_revision.parent_section_id = section.id但我不能像.current_revision虚拟属性一样查询它。

有没有可能变成Section.current_revision某种关联?或者也许唯一的方法是current_revisionsections table?

0 投票
1 回答
17431 浏览

ruby-on-rails - rails 4中的虚拟属性

如何在 rails 4 中使用虚拟属性(getter、setter),因为删除了“attr_accessible”。

我遇到问题,在这里

尝试更新/创建时,我可以达到上述方法,但无法达到下面的设置器。

0 投票
2 回答
167 浏览

ruby-on-rails - 如何使用非拆分属性填充虚拟表单字段

我有一个具有 3 个虚拟属性(phoneAreaCode、phonePrefix 和 phoneSuffix)的表单,将电话号码分成多个段,这些段连接在一起并作为 phoneNum 保存到数据库中。

当用户去更新他们的个人资料时,大部分字段都会被填写,但虚拟字段不会。我尝试使用我认为是吸气剂的东西来使其工作,但我无法弄清楚我错过了什么。关于这一点,我正在使用具有来自第二个模型的地址属性的嵌套表单,但是,当这些属性为 nil 时,表单字段根本不会显示在更新视图中。即使它们为零,有没有办法让它们显示?嵌套的表单属性出现在注册视图中,并且注册和更新视图都从布局呈现相同的表单。模型如下。

0 投票
1 回答
222 浏览

ruby-on-rails - 在 Rails 中定义虚拟属性并使其作为符号可用

我已经定义了几个虚拟属性,同时定义了 setter 和 getters 方法:

到目前为止一切都很好,但我也想使用符号使这个虚拟属性可用,所以我可以做类似的事情@post= Post.first; @post[:shared_to_all]= true

[编辑:]
Ruby 方法是覆盖[][]=运算符,例如:

但这似乎破坏了 Rails 关系方法(那些由has_one- has_many- belongs_to-has_and_belongs_to_many指令带来的方法):例如 nowPost.first.author => nilAuthor.first.posts => []

0 投票
1 回答
242 浏览

ruby-on-rails-3 - 将多个表单值分配给一个数据库列

我是 Rails 的新手,我似乎无法找到如何将多个表单值从我的视图分配给单个数据库列(模型属性)。所以我尝试了虚拟属性的方法,这是我的代码:

我的观点:

我需要将代码类型和代码片段值保存在模型的同一列中。

我的架构:

我的模型:

现在,我知道这是不正确的,因为我的代码值被下一个虚拟属性覆盖。我希望能够将代码类型和代码片段以及其他一些字段组合起来形成一个哈希,然后序列化该哈希以制作数据库列代码。无论如何在 Rails 中可以做到这一点?

0 投票
2 回答
130 浏览

ruby-on-rails - 将 Rails 属性转换为属性值对

我有一个媒体模型,它有一堆标准的元数据属性,并且像往常一样保存在数据库中。我现在要做的是在现有属性之上为这个模型添加一些可配置的元数据属性。这些属性的列表将在配置文件中定义并在运行时加载。它们将作为一系列与主模型关联的属性值对存储在数据库中的不同表中。

所以,我目前的代码是,

我想要做的是能够以与标准元数据属性相同的方式访问和更新媒体模型上的自定义元数据属性。例如,如果自定义元数据属性被称为发布者和贡献者,那么我想在媒体模型中访问它们,@media.publisher即使@media.contributor它们将@media.custom_metadata在其值类似于的关联中[{:name => 'publisher', :value => 'Fred'}, {:name => 'contributor', :value => 'Bill'}]

似乎虚拟属性是实现这一目标的最佳方式,但我能找到的所有使用虚拟属性的人的例子都是属性的名称是静态的并且是已知的,而不是运行时配置中的动态,所以他们可以定义方法,例如,publisher然后publisher=将包含写入相关关联的属性值记录的代码。

attr_accessor *Settings.custom_metadata_fields我可以使用(假设Settings.custom_metadata_fields返回)在类上定义属性[:publisher, :contributor],也可以使用类似的技术使用attr_accessible.

我坚持的部分是如何在从记录中加载数据时从关联中填充虚拟属性,然后反过来,如何在保存记录之前将虚拟属性中的数据传递回关联中。

我目前看到这项工作的两种方式是使用method_missingor attribute_missing,或者可能是 viainitializebefore_save回调?无论哪种情况,鉴于我的模型混合了普通属性和虚拟属性,我不确定如何定义它。

有什么建议么?

0 投票
1 回答
381 浏览

ruby-on-rails-4 - 在 Rails 中分配虚拟属性

我试图了解这两种在 Rails 4 中分配虚拟属性的方法之间的区别。其中一种导致“堆栈级别太深”,其中一种工作正常。我试图通过解析文本字段并用逗号分割它来创建一个标签字段来使用新的 ActiveRecord 数组字段。工作代码如下:

但是,当我将其更改为通过分配给类变量来分配此模型中的标记字段时,会导致“堆栈级别太深”。

有人可以解释为什么这会发生在我身上吗?似乎 usingself.tags会导致此虚拟属性一直运行,直到堆栈爆炸为止。ActiveRecord 的哪一部分导致了这种情况?

0 投票
2 回答
2861 浏览

ruby-on-rails - Rails 4:密码验证错误:“{:password=>["can't be blank"]}" 即使填写了表格

我对 Rails 比较陌生(使用 Rails 4),并且在验证我的用户模型时遇到了问题。即使表单已完全填写了两个密码,当我提交代码时也会打印出两个错误:

{:password=>["can't be blank"], :password_confirmation=>["doesn't match Password"]}

我希望将用户保存到数据库中,但这些验证错误阻止了这种情况的发生。我想知道的是我需要改变什么才能摆脱这些错误。

我正在打印出该params对象,它看起来像这样(此处省略了真实性令牌):

所以看起来passwordandpassword_confirmation属性被正确传递了。我想知道这是否与password我在用户模型中定义的虚拟属性有关,但如果是这种情况,我仍然不太确定如何解决这个问题。任何帮助将不胜感激。让我知道是否需要进一步详细说明。

以下是相关代码供参考:

控制器:

模型:

看法:

0 投票
2 回答
383 浏览

ruby-on-rails - Rails 4:语言选择和虚拟属性

我想要一个小的下拉菜单,用户可以在其中选择网站的语言。为此,我有

我希望它出现在所有页面上,并且我认为没有必要将其存储在模型中,所以我正在考虑使用虚拟属性来制作它。

我只是有点困惑我应该在哪里/如何制作这个虚拟属性 :lang 以便下拉菜单出现在所有页面上,并且语言在用户访问网页的过程中持续存在。我应该在 application_controller.rb 中创建一个 getter/setter 方法吗?

谢谢!