问题标签 [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.
mysql - 带有 ActiveRecord 的 Rails 虚拟属性
我有一个具有以下简化架构的 MySQL 数据库表:
where在 MySQL中hex_id
被声明为 a 。BIGINT
我希望用户输入一个十六进制值,然后将其转换为基数 10 并将其保存在hex_id
. 为了实现这一点,我想我会创建一个名为的虚拟属性hex
来存储十六进制字符串。我的Sensor
模型如下所示:
并且控制器使用标准 rails 生成的代码:
我创建了一个带有使用该hex
属性的表单的视图。
当我单击提交时,该params
数组具有以下内容:
{"utf8"=>"✓", "authenticity_token"=>"some_long_token", "sensor"=>{"hex"=>"E000124EB63E0001"}, "commit"=>"Create Sensor"}
我的问题是该属性hex
始终为空,并且我的验证失败。网络上有很多资源解释了如何使用虚拟属性,但很少有资源解释如何将它们与ActiveRecord
. 我花了几个小时寻找一种方法来解决这个相当简单的问题,但没有找到任何可行的方法。任何帮助表示赞赏。我的红宝石版本是 2.0.0p481。谢谢!
ruby-on-rails - Rails 4 中的虚拟属性
我有一个产品型号,我需要在 _form 视图中写入管理员想要插入的产品编号。我有另一个带有 Supply(产品数量)的表,所以在我的产品表中我没有属性数量,但我只有supply_id
(链接我的两个产品和供应表)
由于我的产品表中没有数量,因此我在产品上使用了虚拟属性。
我不得不更改新的视图并在新的中编辑产品原因我想要字段数量但在编辑中我不想要(因为我使用另一个视图来执行此操作)所以,我删除了部分 _form 并创建了单独的看法。此外,我必须在产品控制器中设置,如果我想更新产品,我必须调用 set_quantity 回调,因为我必须插入一个“假”值来填充params[:product][:quantity]
. 这是因为我在产品模型中的数量虚拟字段上设置了验证存在。我想知道,如果所有这个故事都是正确的(它有效,但我想要一个关于这个故事的编程设计的建议。因为我不喜欢我给出一个假值来填充数量字段的事实)更新产品)
控制器:
模型:
你能说我是否有更好的方法来填充param[:product][:quantity]
更新操作的情况?因为我不喜欢我给它的值 2。谢谢。
ruby-on-rails - 将文件存储视为表中的列
我有一个博客模型,其内容将存储在文件中,其余内容将存储在表中。
我的解决方案如下
我用 getter/setter 方法创建了一个虚拟属性。
但是在这里我有一个问题,我只想在记录有效的情况下将 html 内容存储到文件中,但是当我在控制器中说如下内容时
在设置其他属性之前首先调用我的设置器。由于其他属性已通过存在验证,因此真实记录将无法保存,但我的文件仍将被存储。
所以现在我想要一个解决方案,只有当记录有效并存储时才会创建文件。
ruby-on-rails - 嵌套表单中的虚拟属性不被记录
您将在我的代码中看到我有一个“has_many => belongs_to”模型关联和一个嵌套表单在新操作的视图中。
另外,我在 Rails 表单处理程序中使用了对同一参数使用两个单独的字段?
问题是“prix”属性(在“Projet”模型中)记录在数据库中,而不是“nom”属性(在“Activite”模型中)。
也许问题出在强参数周围,但我认为这在我的代码中都很好……或者在我在链接的另一个 Stackoverflow 问题上找到的代码中。
我的代码中有法语单词:activite 是活动,projet 是项目,nom 是名称,prix 是价格,非常简单:)
谢谢你的帮助 !
应用程序/模型/projet.rb:
应用程序/模型/activite.rb:
应用程序/控制器/projets_controller.rb:
app/views/projets/new.html.erb :
ruby-on-rails - Rails 4 Minitest 测试虚拟属性
所以我有一个 TimeBank 类,它正在更新,并且正在获取两个新的虚拟属性,它们将操纵另外两个现有属性(数据库列)。
使用该应用程序时一切正常。运行测试时,每当我实例化 TimeBank 时,我只能得到上述rescue
语句的结果,即今天的日期 fordate_worked
和0.0
for hours_worked
。设置者似乎没有反应,就像他们什么都不做(在测试中)。
我还定义了要使用的设置器write_attribute(:date_worked, 'SOMEVAL')
,虽然它在应用程序中有效,但对于测试,我得到了类似的错误
测试示例如下:
这两个断言总是失败,因为它们得到今天的日期和 0.0(在 getter 中指定的“默认值”)。如果我在测试前立即设置该行的属性,它仍然没有效果。
我不确定我做错了什么。我想为这 2 个虚拟属性编写测试,但任何设置它们的值似乎都没有效果。我不确定为什么它在测试中不起作用,但在应用程序中工作正常。相同的代码在应用程序控制器中按预期工作。谁能帮我理解为什么?
ruby-on-rails - 虚拟属性 Rails - 未知属性错误
我正在制作一个 Rails 4 应用程序。每个都incident
属于一个user
。每个事件has many events
。我希望我可以创建一个事件并将其传递给事件模型中存在current_user.incidents.new
的属性。message
在创建时,我希望用上述创建一个新事件message
。
这是我的事件模型。
但是,当我跑步时@i = Incident.new(message: 'something')
,我得到ActiveRecord::UnknownAttributeError: unknown attribute 'message' for Incident.
请帮我解决这个问题。
ruby-on-rails - Rails 嵌套模型和虚拟属性初始化
我很难理解属性是如何“发送”到嵌套模型的,以及是否也可以为具有虚拟属性的模型执行此操作。我有三个模型:
在控制台中:
ruby-on-rails - Rails:如何在 setter 方法中使用父属性
语境:
我有一个company
模型有很多projects
,有很多tasks
。company
也有很多,而employees
后者又有很多tasks
。
架构:
问题:
我正在构建一个表单来创建一个项目,用户可以在其中添加多个tasks
. 提交后,表单应创建一条project
记录,一条或多task
条具有hours
和employee_id
属性的记录,并(!)检查该employee
名称是否已存在于数据库中或创建一个新记录。
我通过在表单中添加 jquery并在我的 Task 模型中使用and方法autocomplete
定义一个虚拟属性来解决这个问题。类似于Railscast #102。getter
setter
这成功employee_id
地设置tasks
并创建了employee
员工name
和的新记录task_id
。
目前的问题是模型没有保存company_id
.
我的代码:
问题:
如何使company_id
父模型的属性在我的Task
模型的 setter 方法中可用?像这样:
目前这会产生错误:
undefined local variable or method "company_id" for #<Task:0x98438b8>
编辑:
或者,如果我尝试project.company_id
这告诉我project
是 NilClass:
undefined method company_id for nil:NilClass
更新:
仍然没有解决。任何想法为什么project
在nil
这里?
yii2 - Yii2 非数据库(或虚拟)属性在大规模分配期间未填充?
我定义了一个虚拟属性:
我注意到它在大量分配期间没有填充(在提交表单后,在 中$model->load($_POST)
)。它可以以某种方式与数据库属性一起填充吗?还是我做错了一些没有填充但应该填充的错误?谢谢!
yii2 - Yii2:如何通过虚拟属性对关系进行排序?
我有一堂课Group
,里面有很多Teams
,我想按他们的分数来排序。一个团队的分数是通过迭代其游戏来计算的,因此score不是一个 db-field,它是一个虚拟的只读属性。
这是我的尝试:
这不起作用,因为分数 不是数据库字段。如何按虚拟属性排序关系?