Подпишитесь на рассылку о самых интересных материалах в мире веб-разработки :)

Подключение модуля на лету


(Ivan Baksheev) #1

def show @trainer = Trainer.find_by(nick: params[:trainer]) current_trainer_module = eval(@trainer.nick.capitalize) include current_trainer_module end
Нужно подключать модули внутри акшинов в зависимости от текущих параметров, в каждом модуле есть функции с одинаковым названием.
Сейчас не работает, не знает что такое include внутри функции.
Так вообще можно делать? Тогда как это сделать чтобы работало?
Или как сделать по другому?


(Павел) #2

пиздец… чего ты хочешь добиться вот этим вот кодом, объясни плиз


(Bogdan) #3

Видимо топикстартер хочет подключить модуль по имени, попробуй так:

module Hello
	class World
		def test
			puts 'hello world'
		end
	end
end

mod = Object.const_get("Hello")
obj = mod.const_get("World").new
puts obj.test

а вообще eval это плохой подход не только в руби


(Vadim) #4

http://ithaca.arpinum.org/2010/07/29/ruby-dynamic-includes.html


(Kvokka) #5

module Foo;end
class Bar;end
Bar.send :include, Foo

Это для начала. Так же есть eval, как бы его не ругали (ну и его детки, канеш)

Но, при этом, за попытку eval напрямую из контроллера можно получить от директора красную карточку без выходного пособия.