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

a-wing · January 31, 2018 · Last by n5ken replied at February 01, 2018 · 1335 hits
@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
3 Floor has deleted

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

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

Reply to jasl

video 是在其他表里的

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

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

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

Reply to n5ken

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

Reply to jasl

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

nodes.serializable_hash 提示没有 serializable_hash 对象

Reply to a-wing

你用的 Rails 几?

Reply to jasl

‘rails', '~> 5.1.4

ruby 2.5.0p0

Reply to a-wing

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

Reply to jasl

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

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

XY 问题

Reply to jasl

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

Reply to a-wing

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

You need to Sign in before reply, if you don't have an account, please Sign up first.