问题标签 [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 回答
282 浏览

ruby-on-rails - 将虚拟属性与超类 (STI) 中的单个类属性组合

我正在尝试组合表单中的start_datestart hourstart_minutevirtual 属性Event,以创建一个start_datetime属性(存储在数据库中)。

我(通过 STI)有几个子类Event;让我们称它们为TrainingSessionandWorkSessionPersonalTime

类的结构如下:

的相关部分event.rb

...和events_controller.rb

我已经在我的服务器日志中验证了正确的参数是从表单发送的:

然而,每次我尝试创建一个事件(任何类型)时,我都会收到通知There was an error creating the event.(根据我的创建方法)。如果我注释掉validates :start_datetime,则创建事件,但使用start_datetimeof nil

这必须意味着start_datetime字符串没有从虚拟属性中正确合并,但我不知道为什么。

我在这里想念什么?有没有更好的设置方法start_datetime

0 投票
1 回答
1174 浏览

ruby-on-rails - CanCan,Rails 4,虚拟属性上的 UnknownAttribute 错误

我花了很长时间弄清楚如何在创建新记录期间通过 CanCan 获取虚拟属性:

我有 Teams,带有 :name 和 :description

团队通过成员资格拥有用户,我通过单独的控制器操作进行控制,并将数据保存在我称为“member_selections”的参数中,其中包含带有非特定键的哈希(user_id => 角色)。

因此:我的参数哈希可能如下所示:

我有这里引用的强参数的常用 CanCan 解决方案: https ://github.com/ryanb/cancan/issues/835

为了通过白名单穿透虚拟属性,我使用了这里提到的一种技术,在底部:http: //blog.sensible.io/2013/08/17/strong-parameters-by-example.html

具体来说,我的“team_params”方法如下所示:

现在,如果我删除 .tap 和白名单块,我可以创建新团队,但不能添加新成员。

如果我维护 .tap,我可以添加新成员,但我无法创建新团队。提交“新”表单会产生以下结果:

它甚至在正确调用 TeamsController#create 方法之前就给出了这个错误,所以这不是我将参数错误地传递给 Team.new/.create 的问题,并表明这是一个 CanCan 问题。

Rails 4 中的虚拟属性和 CanCan 是否有其他问题?我怎样才能解决这个问题?

谢谢!

0 投票
2 回答
4574 浏览

ruby-on-rails - 在 Rails 4 中使用 Devise 的虚拟属性

我的用户模型没有:name字段,但我想:name在我的注册表单中包含一个字段,该字段将用于在after_create.

如何从注册表单中获取姓名?

0 投票
1 回答
1546 浏览

ruby-on-rails - Rails 应用程序中的虚拟属性 - 为什么 attr_writer 不能使我的输入与我的 getter 和 setter 方法一起使用?

我正在尝试推出自己的标签系统。我的设置(目前)很像acts_as_taggable_on,带有标签、可标记对象和标签以将一个与另一个相关联。Taggable 是一个模块,它将包含在事件、用户和可能的其他几种可标记对象中。目前我只是想把它与事件联系起来。

我正在关注Railscast #167

在 railscast 中,虚拟属性 tag_names 可以通过attr_writer :tag_names.

attr_accessible :tag_names我的问题是,除非我使用(即'attr_accessible' 而不是'attr_writer'),否则我无法让tag_names 字段接受输入。

指定时attr_writer :tag_names,我提交表单并收到错误:“无法批量分配受保护的属性:tag_names”。当我attr_accessible :tag_names改为时,它似乎可以正常工作,但这是一个安全问题,对吧?(请注意:事件对象的数据库中没有tag_names 字段。)

为什么我不能复制 Railscast?我正在运行 Rails 3.2.11,Railscast 是从 2009 年开始的,但是我找不到任何说 attr_writer 在这个更高版本或类似的东西中已经被 attr_accessible 取代的东西。

谢谢你的帮助!

我的活动表单的相关部分:

我的事件模型:

我的可标记模块:

0 投票
1 回答
1172 浏览

ruby-on-rails - Rails 虚拟属性未验证

我想在很多方面我仍然是一个新手,对这些 Rails 的一些东西。我有用于付款的 ActiveRecord 模型。但是,它只有两件事被添加到它的表中,一旦我们从 authorize.net 得到积极的回应,这些事情就会完成。在这个模型的控制器中,我有我的购物车表单。在购物车表单中,我有从@client 和信用卡信息中提取的默认值的账单信息。它看起来有点像这样:

现在在模型中,我添加了 attr_accessor :cardnumber 和其他卡信息字段。

对于这些,我没有任何 getter 或 setter 方法(也许这就是我所缺少的)。

但是,我在付款模型中确实有这个:

然而,到目前为止,表单将一起绕过此验证并前往结帐。任何帮助将不胜感激!如何让这些验证正常工作?

0 投票
1 回答
521 浏览

ruby-on-rails - Rails 3.2,虚拟访问器和弃用警告

我真的对 Rails 3.2 中的虚拟属性感到困惑,我所有的研究都无助于让事情变得更清晰。

以上,我已经编译了我在互联网上找到的几乎所有替代品。这不是我运行的代码,只是同一事物的几个版本。虽然,无论我尝试什么,我都会收到以下警告:

DEPRECATION WARNING: You're trying to create an attribute 'parent'. Writing arbitrary attributes on a model is deprecated. Please just use 'attr_writer' etc.

有时,我什至得到一个stack level too deep. 我很想了解属性是如何工作的。

1/attr_accessorattr_writerattr_reader对吗?为什么要求我attr_writer在警告中使用?

2/ 我应该如何从模型中写入属性(以及为什么)

3/ 我应该如何从控制器中写入属性(以及为什么)

非常感谢!

更新

经过进一步测试,看起来正确的方法是@parent = id.to_i。我仍然很想解释为什么。我真的很困惑为什么self.不工作。

0 投票
1 回答
616 浏览

ldap - 使用“isMemberOf”虚拟属性来确定用户的组成员身份有哪些注意事项?

  1. 是否所有 LDAP 服务器都支持此虚拟属性(默认情况下)?

  2. 我读到我们必须在使用它之前启用这个虚拟属性。这是它对所有 LDAP 服务器的工作方式吗?这不是默认启用的吗?

  3. 使用它来确定用户的组成员身份还有其他缺点吗?

0 投票
2 回答
264 浏览

ruby-on-rails - 多个字段的单个虚拟属性定义

我想知道是否有办法设置虚拟属性,以便它可以处理多个字段/变量。

基本上,我的模型中有几个不同的整数列(收入、税收),对于每个列,我需要检查表单何时提交,并删除非法字符,我正在通过设置虚拟属性并使用trto strip那些角色。

然后我在控制器中设置强参数,应该这样做:

问题是我有很多字段(不仅仅是我上面列出的两个),所以对于每个字段,(其中许多只需要检查完全相同的非法字符)我必须使用一个新的虚拟属性和基本上只是重复相同的代码:

无论如何,是否可以为许多不同的字段设置一个公共共享属性,同时仍然能够设置强参数?

0 投票
3 回答
356 浏览

ruby-on-rails - 为什么我的虚拟属性不起作用?

我正在Rails 3.2.17尝试访问模型中的两个虚拟属性(expiration_amount& expiration_format),但我尝试过的任何方法都不允许我访问它们。

其他一切似乎都正确更新,但是在我的日志中,虚拟属性总是空白。

编辑我按照建议添加了两者:expiration_amount :expiration_formatattr_accessible但它仍然无法正常工作。他们俩都是空白的。我确实注意到的一件事是记录器调用是在它到达数据库之后发生的。这before_update不是正确的过滤器吗?

编辑 2是否有可能Devise阻止访问虚拟属性?

编辑 3我刚决定从控制器中启动它(它正在工作),但我仍然很好奇为什么我无法访问模型中的那些虚拟属性。

工作控制器动作(更新方法)

工作模型法

---原始代码---

用户.rb

形式

日志

0 投票
1 回答
872 浏览

ruby-on-rails-4 - Rails 4:composed_of 映射到 JSON 存储属性

我设置了以下模型

datetime_select在我的表单中使用了助手:

这工作得很好,但是当我update用提交的表单数据调用我的控制器时,我收到以下错误消息:

所以,我猜更新的方法试图attributes直接操作哈希,但显然它找不到属性expires_at,因为它是 JSON 列的简单访问器方法data

我知道我可以简单地将这个字段添加到数据库中,它可能会起作用——尽管那时不需要composed_of声明。但我宁愿不走这条路,因为不是每个任务都有一个expires_at专栏。

我该如何克服这个错误?还是我错过了什么?