Ruby: Как получить класс на основе имени класса и как получить поле объекта на основе имени поля? - PullRequest
1 голос
/ 12 декабря 2010

Вопрос 1

Как получить класс по имени класса в виде строки?

Например, скажем, Product класс имеет do_something метод:

str = "product"
<what should be here based on str?>.do_something

Вопрос 2

Как получить поле объекта по имени поля в виде строки?

Например, скажите Product classимеет price поле:

str = "price"
product = Product.new
product.<what should be here based on str?> = 1200

Ответы [ 2 ]

5 голосов
/ 12 декабря 2010

Ответ Джейкоба на первый вопрос предполагает, что вы используете Rails, и будет работать нормально, если вы это сделаете. В случае, если вы не можете позвонить Kernel::const_get(str), чтобы найти существующую константу по имени.

send - это чистый рубин. Нет необходимости интернировать ваши строки с помощью send, хотя (преобразуйте их в символы), прямые строки работают нормально.

4 голосов
/ 12 декабря 2010
  1. Использование capitalize и constantize:

    str.capitalize.constantize.do_something
    
  2. Использование send:

    product.send(str + '=', 1200)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...