2012-01-19 7 views
1

Некоторые из моих моделей определили жидкие методы, с помощью:Как я могу разоблачить все доступные жидкие методы для модели?

class MyModel < ActiveRecord::Base 
    liquid_methods :created_at, :foo, :bar, :baz 
end 

Как я могу получить список доступных методов для модели (в хэш или массив, я полагаю)? Я хотел бы вывести список доступных методов пользователям, которые используют их в таких вещах, как сообщения на форуме или шаблоны сообщений.

ответ

1

Сохранить себя ненужную экземпляра:

MyModel::LiquidDropClass.public_instance_methods - Liquid::Drop.public_instance_methods 
# => [:foo, :bar, :baz] (or whatever your liquid methods are) 

При вызове liquid_methods на модели, жидкость создает LiquidDropClass класса в пространстве имен вашей модели и содержит жидкие методы.

-1

Я не знаю, если он будет иметь различное поведение в отношении методов жидкости, но вы можете сделать:

MyModel.methods 
MyMethod.new.methods 

В любом случае, на классе или на экземпляре, вы можете вызвать .methods, чтобы получить массив символов, которые являются допустимыми методами для использования в этом классе или экземпляре. После этого вы можете делать такие вещи, как .methods.sort или .methods.sort_by т.д.

+0

Таким образом, я получаю: '[333] liquid_methods (* arg1) Class (Module)'. MyModel.liquid_methods ничего не возвращает. Предложения? – MrDerp

+0

Это решение возвращает все методы, а не только жидкие методы. – JellicleCat

1

Это работает:

MyModel.new.to_liquid.methods - Liquid::Drop.new.methods 
Смежные вопросы