Rails: у меня есть метод класса, и я хочу изменить что-то из экземпляра - PullRequest
1 голос
/ 02 июня 2010

Rails: у меня есть метод класса, и я хочу изменить что-то из экземпляра

как то так:

class Test < Main
   template :box

   def test
      # here I want to access the template name, that is box
   end
end

class Main
   def initialize
   end

   def self.template(name)
      # here I have to save somehow the template name
      # remember is not an instance.
   end
end

, что аналогично модельным классам:

# in the model
has_many :projects

Как мне это сделать?

РЕДАКТИРОВАТЬ:

class Main
  def self.template(name)
    @name = name
  end

  def template
    Main.instance_eval { @name }
  end
end

class Test < Main
    template 6
end

t = Test.new.template
t # t must be 6

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Вы должны укусить пулю и научиться мета-программированию в ruby. На нем есть книга.

http://pragprog.com/titles/ppmetr/metaprogramming-ruby

Вот один из способов сделать это.

class M
  def self.template(arg)
    define_method(:template) do
      arg
    end
  end
end

class T < M
  template 6
end

t = T.new

puts t.template
1 голос
/ 02 июня 2010

Есть несколько способов сделать это. Вот один из них:

class Main
  def self.template(name)
    @name = name
  end
end

class Test < Main
  def test
    Main.instance_eval { @name }
  end
end

Main.template 5
Test.new.test
  ==> 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...