传递值的ruby动态方法

djb*_*ick 2 ruby ruby-on-rails

如何将值传递给在rails模型上调用的动态方法名称?

@model.send(dynamic_method_name.to_sym,123)
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

 wrong number of arguments (1 for 0)
Run Code Online (Sandbox Code Playgroud)

如果我使用相同的方法,但是:

 @model.post_id = 123
Run Code Online (Sandbox Code Playgroud)

然后它工作.

因此,post_id方法有一个"setter"方法(因此也就是动态方法名称).

当方法是动态的时,如何将值传递给此setter?

谢谢!

And*_*Vit 8

您需要将"="添加到dynamic_method_name.在ruby中,:post_id是getter :post_id=的名称,是setter的名称.这.to_sym不是绝对必要的,所以你可以这样做:

@model.send("#{dynamic_method_name}=", 123)
Run Code Online (Sandbox Code Playgroud)