如何使用存储在变量中的值作为方法调用?
How do I use the value stored in a variable as a method call?
我有一个看起来像这样的方法:
> rating
=> "speed"
然后我有一个看起来像这样的电话:
profile.ratings.find_by(user: current_user).speed
我想做的是将 rating
的值传递给那个调用。
但是当我这样做时:
profile.ratings.find_by(user: current_user).rating
它不起作用,因为在每个 ratings
对象上没有调用 rating
的方法。
这是我在 运行 以上时得到的错误:
Rating Load (4.5ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."profile_id" = AND "ratings"."user_id" = 7 LIMIT [["profile_id", 12], ["LIMIT", 1]]
NoMethodError: undefined method `rating' for #<Rating:0x007fca0c4fba90>
我通常会进行字符串插值,但现在我正在处理方法调用。
我该怎么做?
您可以使用 send method
profile.ratings.find_by(user: current_user).send(rating)
如果您希望在 ActiveRecord 模型上访问 属性,他们提供了一个简单的访问器:
profile.ratings.find_by(user: current_user)[rating]
这比 send
方法更安全,因为它只会获取属性。如果您有一个名为 ban_and_charge_ten_bucks!
的方法,如果您调用 send
而不检查您正在调用的内容,一些恶意用户可能会允许您的系统调用该方法。
我有一个看起来像这样的方法:
> rating
=> "speed"
然后我有一个看起来像这样的电话:
profile.ratings.find_by(user: current_user).speed
我想做的是将 rating
的值传递给那个调用。
但是当我这样做时:
profile.ratings.find_by(user: current_user).rating
它不起作用,因为在每个 ratings
对象上没有调用 rating
的方法。
这是我在 运行 以上时得到的错误:
Rating Load (4.5ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."profile_id" = AND "ratings"."user_id" = 7 LIMIT [["profile_id", 12], ["LIMIT", 1]]
NoMethodError: undefined method `rating' for #<Rating:0x007fca0c4fba90>
我通常会进行字符串插值,但现在我正在处理方法调用。
我该怎么做?
您可以使用 send method
profile.ratings.find_by(user: current_user).send(rating)
如果您希望在 ActiveRecord 模型上访问 属性,他们提供了一个简单的访问器:
profile.ratings.find_by(user: current_user)[rating]
这比 send
方法更安全,因为它只会获取属性。如果您有一个名为 ban_and_charge_ten_bucks!
的方法,如果您调用 send
而不检查您正在调用的内容,一些恶意用户可能会允许您的系统调用该方法。