ruby - 如何使用存储在变量中的值作为方法调用?

标签 ruby metaprogramming

我有一个看起来像这样的方法:

> 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" = $1 AND "ratings"."user_id" = 7 LIMIT $2  [["profile_id", 12], ["LIMIT", 1]]
NoMethodError: undefined method `rating' for #<Rating:0x007fca0c4fba90>

我通常会进行字符串插值,但现在我正在处理方法调用。

我该怎么做?

最佳答案

如果您想要访问 ActiveRecord 模型上的属性,他们提供了一个简单的访问器:

profile.ratings.find_by(user: current_user)[rating]

这比 send 方法更安全,因为它只会获取属性。如果您有一个名为 ban_and_charge_ten_bucks! 的方法,如果您调用 send 而不检查调用的内容,一些恶意用户可能会允许您的系统调用该方法。

关于ruby - 如何使用存储在变量中的值作为方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555018/

相关文章:

ruby-on-rails - 如何检查参数是模型的实例还是 Rails 中的类?

ruby - 当我在 ruby​​ on Rails 中使用 filterrific 和 will_paginate 时,javascript 无法正常工作

ruby - Ruby 中非常简单的 DSL

c++ - 获取基类的更简单方法

C++ 模板元编程 : sort list of mutexes to enforce locking order

ruby - 仅当在模板中定义变量时 Puppet 3 循环执行

ruby-on-rails - Jquery 库在 Rails 4 中无法正常工作

c++ - 转发元组的一个元素

ruby - 如何为 Ruby 中的所有实例设置默认(而不是 nil)变量初始化

c# - 创建一个简单的 c# dll 并从 ruby​​ 访问它