Ruby on rails 在Ruby on Rails上创建动态方法名

Ruby on rails 在Ruby on Rails上创建动态方法名,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,Desive源代码显示了映射: def self.define_helpers(mapping) #:nodoc: mapping = mapping.name class_eval <<-METHODS, __FILE__, __LINE__ + 1 def authenticate_#{mapping}!(opts={}) opts[:scope] = :#{mapping} warden.authenticate!(opts) if !

Desive源代码显示了映射:

def self.define_helpers(mapping) #:nodoc:
  mapping = mapping.name

  class_eval <<-METHODS, __FILE__, __LINE__ + 1
    def authenticate_#{mapping}!(opts={})
      opts[:scope] = :#{mapping}
      warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
    end

    def #{mapping}_signed_in?
      !!current_#{mapping}
    end

    def current_#{mapping}
      @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
    end

    def #{mapping}_session
      current_#{mapping} && warden.session(:#{mapping})
    end
  METHODS

  ActiveSupport.on_load(:action_controller) do
    helper_method "current_#{mapping}", "#{mapping}_signed_in?", "#{mapping}_session"
  end
end

我得到错误:
未定义designe:Class(NoMethodError)的方法“current\u user”
您缺少designe正在使用的
Class\u eval
调用。这就是允许他们使用字符串插值动态创建方法的原因

试试这个:

class Devise

  mapping = "user"

  class_eval <<-METHOD
    def self.current_#{mapping}
      puts "hello"
    end
  METHOD

end

Devise.current_user
类设计
mapping=“用户”

class_-eval您缺少designe正在使用的
class_-eval
调用。这就是允许他们使用字符串插值动态创建方法的原因

试试这个:

class Devise

  mapping = "user"

  class_eval <<-METHOD
    def self.current_#{mapping}
      puts "hello"
    end
  METHOD

end

Devise.current_user
类设计
mapping=“用户”

class_-eval您缺少designe正在使用的
class_-eval
调用。这就是允许他们使用字符串插值动态创建方法的原因

试试这个:

class Devise

  mapping = "user"

  class_eval <<-METHOD
    def self.current_#{mapping}
      puts "hello"
    end
  METHOD

end

Devise.current_user
类设计
mapping=“用户”

class_-eval您缺少designe正在使用的
class_-eval
调用。这就是允许他们使用字符串插值动态创建方法的原因

试试这个:

class Devise

  mapping = "user"

  class_eval <<-METHOD
    def self.current_#{mapping}
      puts "hello"
    end
  METHOD

end

Devise.current_user
类设计
mapping=“用户”

class_eval请注意,您尝试使用的行位于“class_eval”块中。你可以试试看

class Devise
    mapping = "user"

    class_eval <<-METHODS

    def self.current_#{mapping}
        puts "hello"
    end
    def self.puts_current
        puts @current_#{mapping}
    end

    METHODS
end

Devise.current_user
类设计
mapping=“用户”

class_eval请注意,您尝试使用的行位于“class_eval”块中。你可以试试看

class Devise
    mapping = "user"

    class_eval <<-METHODS

    def self.current_#{mapping}
        puts "hello"
    end
    def self.puts_current
        puts @current_#{mapping}
    end

    METHODS
end

Devise.current_user
类设计
mapping=“用户”

class_eval请注意,您尝试使用的行位于“class_eval”块中。你可以试试看

class Devise
    mapping = "user"

    class_eval <<-METHODS

    def self.current_#{mapping}
        puts "hello"
    end
    def self.puts_current
        puts @current_#{mapping}
    end

    METHODS
end

Devise.current_user
类设计
mapping=“用户”

class_eval请注意,您尝试使用的行位于“class_eval”块中。你可以试试看

class Devise
    mapping = "user"

    class_eval <<-METHODS

    def self.current_#{mapping}
        puts "hello"
    end
    def self.puts_current
        puts @current_#{mapping}
    end

    METHODS
end

Devise.current_user
类设计
mapping=“用户”

class\u eval
class\u eval
到底做什么?而
方法
constant?类eval接受一个字符串输入,并在它所在的类的上下文中使用Ruby解释器对其求值。因此,它最终运行
def current_user…
,从而创建该方法。
方法
不是一个常数,它只是一个使多行字符串更容易编写的常数<代码>方法
可以是
快乐
,这没关系,也没什么特别的。
课堂评估
到底做什么?而
方法
constant?类eval接受一个字符串输入,并在它所在的类的上下文中使用Ruby解释器对其求值。因此,它最终运行
def current_user…
,从而创建该方法。
方法
不是一个常数,它只是一个使多行字符串更容易编写的常数<代码>方法
可以是
快乐
,这没关系,也没什么特别的。
课堂评估
到底做什么?而
方法
constant?类eval接受一个字符串输入,并在它所在的类的上下文中使用Ruby解释器对其求值。因此,它最终运行
def current_user…
,从而创建该方法。
方法
不是一个常数,它只是一个使多行字符串更容易编写的常数<代码>方法
可以是
快乐
,这没关系,也没什么特别的。
课堂评估
到底做什么?而
方法
constant?类eval接受一个字符串输入,并在它所在的类的上下文中使用Ruby解释器对其求值。因此,它最终运行
def current_user…
,从而创建该方法。
方法
不是一个常数,它只是一个使多行字符串更容易编写的常数<代码>方法
可以是
快乐
,这没关系,也没什么特别的。