我在Ruby / Rails中做一些元编程时遇到了一个问题,这个元编程必须是次要的,但我无法得到线索。
我不想将值分配给活动记录关系,我的模型具有属性:
MyModelClass.p1_id,
.p2_id,
...
.p8_id
SecondModel.position #Integer in (1..8)
我现在想做以下
sms = SecondModel.where(:xyz => 'bla')
sms.each do |sm|
mmc = MyModellClass.first
mmc.#somehow construct method here = sm.id
end
这样就完成了
mmc.p1_id = sm.id
mmc.p2_id = sm.id
..
mmc.p8_id = sm.id
总结一下:我想动态地创建那个p * n * _id的东西,但我不知道如何告诉Ruby,这应该是一个方法。我到目前为止尝试过:
mmc.send('p#{sm.position.to_s}_id'.to_sym) = sm.id
但这不起作用。有线索吗?
答案 0 :(得分:0)
你很亲密。试试这个:
mmc.send("p#{sm.position.to_s}_id=", sm.id)
这里我们用=
调用方法,并将attribute的值作为send
的第二个参数传递