新手问题 萌新问题,关于 ActiveRecord

a-wing · 2018年01月31日 · 最后由 n5ken 回复于 2018年02月01日 · 1271 次阅读
@nodes = Node.select(......................

render json: @nodes

然后我想在@nodes里加一个字段 比如:

@nodes.video = "aaa"

该怎么写???

反正就是这个意思,不知道有没有表达清楚

我知道在 ruby 里 @nodes 是作为 ActiveRecord 的对象的

还是应该先把对象转换成散列,再赋值那?

没看出你这有必要赋值到 nodes 上

Dynamically defining a method on a single instance in Ruby

https://honnef.co/posts/2009/10/ruby-dynamic-method/

def @nodes.video= value
  @video = value
end
4 楼 已删除

你用 serializer 吗?可以在 serializer 里定义, jbuilder 也可以随便定义的,不过细节上有什么区别我不太清楚

video 是不是真实存在于数据库表里的?

jasl 回复

video 是在其他表里的

就是在一个已生成的对象中添加原来没有一个字段

应该说类似于 JavaScript 的原型那种(不知道这样说有没有问题)

你直接搞个虚拟属性好了 attribute :video, :string 或者你也可以先 hash = nodes.serializable_hash 得到散列表,然后 hash[:video] = ‘’ 来搞

n5ken 回复

这个要写在 Model 里吗? controllers 不能实现这种操作吗?

jasl 回复

我在 Node 类里加上 attribute :video, :string 提示没有 video 对象

nodes.serializable_hash 提示没有 serializable_hash 对象

a-wing 回复

你用的 Rails 几?

jasl 回复

‘rails', '~> 5.1.4

ruby 2.5.0p0

a-wing 回复

我懂了,你那个 @nodes 返回的是多个 Node 数据,那么你是想给 @nodesvideo 做法就有问题了,还是你想给每一个 Nodevideo 呢?

jasl 回复

对对,是这样的。要给每一个 Node 加 video

@nodesActiveRecord::Relation 对象,要取每个 node 的 “字段”,应该是 map(&:video)

XY 问题

jasl 回复

Node 里,在 attribute :video, :string 之前,加上 attr_accessor :video 先定义这个属性,然后声明他为 ActiveRecord 的属性,即可,赋值时候要遍历对象进行赋值

a-wing 回复

不需要写在 Model 里,只加在那个实例上,但这种不是好的 practice 😁

需要 登录 后方可回复, 如果你还没有账号请 注册新账号