2015-09-15 2 views
0

Я пытаюсь добавить имя переменной в имя method_name в rails. Я получаю ошибку.Rails - Как использовать переменную как часть имени метода

 
**Controller ACTION** 
===================== 
def my_action(state) 
    method_#{state} 
end 

**Model methods** 
==================== 
def method_start 
end 

def method_end 
end 

как вызвать метод с переменным именем я не получаю.

+2

Возможный дубликат [Как динамически вызывать методы на основе их имени?] (Http://stackoverflow.com/questions/5349624/how-to-call-methods-dynamically-based-on-their-name) –

+0

здесь мне нужно вызвать различные методы модели. можно ли использовать этот метод? –

+0

Class_eval - типичный шаблон для метапрограмм – Anatoly

ответ

1

Используйте метод Object.send для вызова метода по имени. Например,

def my_action(state) 
    if [:start, :end].include?(state) 
    model.send("method_#{state}") 
    end 
end 

Убедитесь, чтобы проверить state переменную для безопасности.Object.send может вызывать любой метод, включая частные.

Смежные вопросы