0

我在 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

但这不起作用。有什么线索吗?

4

1 回答 1

0

你很亲密。尝试这个:

mmc.send("p#{sm.position.to_s}_id=", sm.id)

这里我们调用方法=并传递属性的值作为第二个参数send

于 2013-10-18T09:59:05.633 回答