Ruby on rails 在Ruby on Rails上创建动态方法名
Desive源代码显示了映射: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 !
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 evalclass\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…
,从而创建该方法。方法
不是一个常数,它只是一个使多行字符串更容易编写的常数<代码>方法
可以是快乐
,这没关系,也没什么特别的。