从Ruby / Rails中的构造字符串调用方法

时间:2013-10-18 09:51:30

标签: ruby-on-rails ruby metaprogramming

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

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

1 个答案:

答案 0 :(得分:0)

你很亲密。试试这个:

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

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