ruby-on-rails - 如何将字段添加到 Rails 模型?
问题描述
我有一个模型Person
,并且基于一个条件,我想根据一个条件向它添加一个字段。
applied
也就是说,如果满足控制器中的条件,我需要一个字段。
我@person.applied = true
在方法返回之前做了,如果我做了puts @person.applied
,true
按预期记录。但是,如果我这样做puts @person
,applied
则不会列出该字段,而所有其他字段(存储在数据库中)都会列出。
我也有attr_accessor :applied
在模型中。
我究竟做错了什么?
编辑(片段)
# people_controller.rb
def show
if @application
@person.applied = true
end
puts @person.applied # logs true
puts @person # applied is not included still
render json: @person
# person.rb
class Person < ApplicationRecord
attr_accessor :applied
end
解决方案
做这个:
# person.rb
class Person < ApplicationRecord
attribute :applied
end
# people_controller.rb
def show
if @application
@person.applied = true
end
p @person.applied # logs true
p @person # applied is not included still
render json: @person
# rest of your code
这适用于 rails 6 和 sqlite3
请注意,这是一个虚拟属性。您必须在要使用它的控制器操作中设置它,因为它不会保留在数据库中。
推荐阅读
- android - SQLiteException:将 sqlcipher 版本从 3 升级到 4 时文件不是数据库
- react-native - 使用 mapview react native 编译时应用程序崩溃
- python - 从 PostgreSQL 'builtin_function_or_method' 对象获取数据时出错,没有属性 'execute'
- javascript - 如何使用 sourcemap 和来自字符串的评估 TypeScript
- php - 是否可以参数化具有连接变量的查询?
- python - 如何找到两个文件之间的时间戳差异
- php - PHP数组代码返回json数据,如何从数组json中获取具体数据
- xml - 使用 XSLT 删除 XML 中的一些节点
- r - 如何使用 censReg 修复“错误:由于类型不兼容(列表/列表)而无法加入 '.rows' x '.rows'”
- c# - SSIS:C# 中的条件拆分