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

ruby-on-rails - 在分配虚拟属性时发出信号验证错误?

这是一个 Rails/ActiveRecord 问题。

我有一个模型,它基本上必须代表事件或表演。每个事件都有许多属性:属性基本上类似于“在这个事件中,人 X 有角色 Y”。

我得出的结论是,允许用户编辑此数据的最佳方法是提供一个需要结构化格式的自由文本字段,我将其称为角色字符串

singer: Elvis Costello, songwriter: Paul McCartney, ...

我使用自动完成功能来完成角色名称(歌手、词曲作者......)和人名。角色和人员都存储在数据库中。

为了实现这一点,我在 Event 模型中创建了一个虚拟属性:

这一切都很好。当角色字符串格式正确并且角色字符串给出的关联都检查出来时,整个事情运行得很好。

但是如果角色字符串格式不正确怎么办?好的,我想,我可以使用正则表达式和标准验证来检查格式:

但是如果角色字符串隐含的关联无效怎么办?例如,如果我给上面的角色字符串,并且Elvis Costello没有引用一个有效的人,会发生什么?

我想,好吧,我可以使用validates_each属性:role_string来查找关联,如果给定的名称之一不匹配任何内容,则抛出错误。

我的问题有两个:首先,我不喜欢这种方法,因为要验证关联,我必须解析字符串并查找它们,这重复了我自己要做的事情role_string=,除了实际将关联保存到数据库。

其次,......我如何表明在分配给这个虚拟属性时发生了错误?

0 投票
2 回答
3342 浏览

ruby-on-rails - 如何验证 ActiveRecord 模型中的虚拟属性?

我正在使用虚拟属性将标签保存在表单中以逗号分隔的文本框中的 Entry 模型中(基于Railscasts #167):

我想在我的标签名称上添加验证,但我不确定最好的方法是什么。我在 Tag 模型中定义了一个现有的验证方法:

但是,由于该update_tags方法是在保存后调用的,因此创建中的任何验证错误都将在条目已保存之后。

我正在考虑在 Entry 模型中创建一个验证方法并在输入保存时调用它,但是:

  1. 如果我这样做,我不确定进行验证的最佳方法是什么。我是在每个名称中创建自己的验证Entry还是为每个名称创建一个Tag对象并检查t.valid??我会以某种方式收集Tag或生成验证错误消息吗?
  2. 我不确定这是否是进行此类验证的正确方法。

有什么建议么?

0 投票
2 回答
866 浏览

ruby-on-rails - ActiveRecord 关联在更新中的记录之前保存

我有一个Entry有很多Tags 的模型。通过虚拟属性将Tags 添加到我的表单上的文本框中,从而将它们添加到条目中。tag_names在对Entry模型进行验证之前,tag_names 字符串Tag使用find_or_create_by_name. 该Tag模型还具有验证以确保标签名称与通过关联运行的正则表达式匹配。

我的 Entry 模型如下所示:

当我创建一个新Entry对象并为其分配标签时,一切正常 - 如果其中一个Tags 上存在验证错误,则不会保存标签,并且会传回错误消息。但是,如果我尝试使用无效标记更新现有的 Entry 对象,而不是传回消息,我的self.tags=调用(在update_tags上面)会抛出带有验证错误消息的异常。即使我覆盖find_or_create_by_name实际上只是返回一个新对象而不是调用create,我也会得到相同的结果。

在我看来(并且文档似乎证实了)该tags=调用实际上是在对象已经存在Tag时保存主记录之前保存我的对象。Entry我能做些什么来让这个保存不发生,或者阻止它引发异常并导致我的保存返回错误?

0 投票
3 回答
213 浏览

ruby-on-rails - 插件中的虚拟属性

我需要一些有关虚拟属性的帮助。此代码工作正常,但我如何在插件中使用它。目标是将此方法添加到使用该插件的所有类中。

谢谢

0 投票
2 回答
3527 浏览

sql - Rails 虚拟属性搜索或 sql 组合列搜索

我有一个用户模型,其属性为“first”和“last”,例如 User.first.first #=> "Charlie" User.first.last #=> "Brown"

此用户模型还有一个虚拟属性“full_name”

例如:

如果我可以通过该虚拟属性进行搜索,那就太好了,例如动态查找:

find 中的条件示例:

我希望至少能在 SQL 语言中找到一些可以做到这一点的方法;如果也有动态虚拟属性查找,那就是馅饼上的额外香草来源。(今年冬天有人过吗?)

我还担心正在搜索的名称,例如,“Holmes”可能只能在“第一”列中搜索,但不能在“最后”列中搜索,例如,User.first.full_name #=> "Sherlock Holmes"

我确实尝试进行更全面的搜索:

用户.rb

例如

但是我只是觉得这里的 find_by_full_name 方法有点笨拙。

我的意思是,如果我有一个 full_name 列,它每次都由一个后保存过滤器设置,并带有 first 和 last 的 concat。所以找到一个人的名字,尤其是对这个人的模糊记忆,是有帮助的。因此,如果我记得那个人的名字或姓氏中的“Doe”,我总是可以做一个简单的 User.find_by_full_name('Doe') 来尽可能多地返回以进一步确定它。

And since it is a column, I can search it in a find(:conditions[...]) clause if I have to do something like Project.find(:all,:include => :users, :conditions=>['users.full_name LIKE ?', query]) where

Happy Holidays N

0 投票
1 回答
2137 浏览

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

我的模型如下所示:

我的问题 1.如何正确编写getter方法item_location定义?2. 如何验证 item_location 字段。我创建了 validate_item_location 方法,但是当我通过表单发布数据时,不知道如何获取 item_location 变量。3.我的setter方法可以吗?

谢谢!

0 投票
1 回答
1051 浏览

ruby-on-rails - Rails 中新模型的虚拟属性?

我的应用程序的这一部分负责为拥有一个的连锁店(如 H&M)创建 Webshop 模型。如果该连锁店的网站也是网店,它会创建一个网店模型。

如果该网站不是网上商店,那么它就让它在链模型中的字符串。

问题:我正在使用复选框和虚拟属性执行此操作。因此,当向链控制器发送请求时,复选框会设置值“set_webshop”。

更新链模型时一切正常,但创建新模型时不行?我想不通为什么?

这是 POST 和 PUT 请求。

有没有一种特殊的方法来处理 Rails 中新模型的 virtual_attributes?

0 投票
2 回答
550 浏览

ruby-on-rails - 首选项值 - 使用具有虚拟属性的模型的静态无表

我试图从我的数据库中删除两个表。这些表是 message_sort_options 和 per_page_options。这些表基本上只有 5 条记录,这些记录是用户可以在首选项表中设置为他们的首选项的选项。首选项表具有诸如 sort_preferences 和 per_page_preference 之类的列,它们都指向包含选项的其他两个表中的记录。我如何设置具有虚拟属性和选项固定值的模型 - 每次查找首选项时都消除表查找?

0 投票
1 回答
2145 浏览

ruby-on-rails - 如何在 Ruby 模型中创建只读虚拟属性

我想创建一个虚拟属性,当您执行 model_instance.inspect 时将始终包含该属性。我知道 attr_reader 会给我与定义实例方法相同的东西,但我希望这个属性成为对象“组成”的一部分

我怎样才能做到这一点?

谢谢!

更新

以下是没有更详细的工作:

如您所见,当我使用控制台时,它不返回“less_secure_asset_url”属性

0 投票
1 回答
1191 浏览

ruby-on-rails - 初始化虚拟属性

我有一个IncomingEmail具有attachments虚拟属性的模型:

我希望将attachments虚拟属性初始化为,[]而不是nil这样我可以这样做:

没有首先设置i.attachments[](换句话说,我希望此虚拟属性默认为空数组而不是nil