Rails使用define_method进行赋值方法不起作用

时间:2018-05-28 12:35:48

标签: ruby-on-rails ruby

我有一个常数

TYPES = %w(car truck)

我想以dynalically定义自定义分配方法

TYPES.each do |type|
  define_method "#{type}s=(objects)" do

但它不起作用, 当我打电话

myobject.cars=objects

我收到的错误方法虽然可以跟踪但不存在

puts myobject.methods

确实有一个方法

cars=(objects)

3 个答案:

答案 0 :(得分:2)

define_method需要方法名称,而不是签名。

define_method "#{type}s=" do |objects|
  puts objects
end

答案 1 :(得分:1)

你必须写这样的东西才能使它发挥作用:

define_method "#{type}s=" do |objects|

答案 2 :(得分:0)

define_method(symbol) { block } → symbol 实际的方法是在块中,块的参数是实际方法的参数。以下是Ruby文档的描述。 在接收器中定义实例方法。方法参数可以是Proc,Method或UnboundMethod对象。如果指定了块,则将其用作方法体。使用instance_eval来评估此块,因为define_method是私有的,所以这一点很难证明。 (这就是我们在这个例子中使用发送黑客的原因。)