루비에서 객체에 대한 모든 메소드를 나열하는 방법은 무엇입니까?
특정 개체가 액세스할 수 있는 모든 메서드를 나열하려면 어떻게 해야 합니까?
나는 있습니다@current_user
애플리케이션 컨트롤러에 정의된 개체:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
또한 보기 파일에서 사용할 수 있는 방법이 무엇인지 알고 싶습니다.구체적으로 어떤 방법이:has_many
협회가 제공합니다.(알고 있습니다.:has_many
제공해야 하지만 확인하고 싶습니다.)
다음은 기본 개체 클래스에 없는 사용자 클래스의 메서드를 나열합니다.
>> User.methods - Object.methods
=> ["field_types", "maximum", "create!", "active_connections", "to_dropdown",
"content_columns", "su_pw?", "default_timezone", "encode_quoted_value",
"reloadable?", "update", "reset_sequence_name", "default_timezone=",
"validate_find_options", "find_on_conditions_without_deprecation",
"validates_size_of", "execute_simple_calculation", "attr_protected",
"reflections", "table_name_prefix", ...
참고:methods
클래스 및 클래스 인스턴스에 대한 메서드입니다.
ActiveRecord 기본 클래스에 없는 사용자 클래스의 메서드는 다음과 같습니다.
>> User.methods - ActiveRecord::Base.methods
=> ["field_types", "su_pw?", "set_login_attr", "create_user_and_conf_user",
"original_table_name", "field_type", "authenticate", "set_default_order",
"id_name?", "id_name_column", "original_locking_column", "default_order",
"subclass_associations", ...
# I ran the statements in the console.
(많은) has_methods_의 결과로 생성된 메서드는 User 클래스에 정의된 많은 관계의 결과에 없습니다.methods
불러.
추가됨:has_many는 메서드를 직접 추가하지 않습니다.대신 ActiveRecord 기계는 Ruby를 사용합니다.method_missing
그리고.responds_to
메서드 호출을 즉시 처리하는 기술.결과적으로 방법은 에 나열되지 않습니다.methods
방법 결과
아니면 그냥User.methods(false)
해당 클래스에 정의된 메서드만 반환합니다.
수신기에서 공용 인스턴스 메서드 및 보호된 인스턴스 메서드의 이름이 들어 있는 배열을 반환합니다.모듈의 경우 이들은 공개 메서드 및 보호 메서드이고 클래스의 경우 인스턴스(싱글턴이 아님) 메서드입니다.인수가 없거나 잘못된 인수를 지정하면 mod의 인스턴스 메서드가 반환되고, 그렇지 않으면 mod 및 mod의 수퍼 클래스의 메서드가 반환됩니다.
module A
def method1() end
end
class B
def method2() end
end
class C < B
def method3() end
end
A.instance_methods #=> [:method1]
B.instance_methods(false) #=> [:method2]
C.instance_methods(false) #=> [:method3]
C.instance_methods(true).length #=> 43
할수있습니다
current_user.methods
더 나은 목록을 위해
puts "\n\current_user.methods : "+ current_user.methods.sort.join("\n").to_s+"\n\n"
이것들 중 하나는 어떻습니까?
object.methods.sort
Class.methods.sort
인스턴스(@current_user의 경우)로 응답하는 메서드 목록을 찾고 있는 경우.루비 문서화 방법에 따라
공용 메서드와 보호된 메서드의 이름 목록을 반환합니다.여기에는 obj의 조상들이 접근할 수 있는 모든 방법이 포함됩니다.옵션 매개 변수가 false이면 obj의 공용 및 보호된 싱글톤 메서드 배열을 반환합니다. obj에 포함된 모듈에 메서드가 배열에 포함되지 않습니다.
@current_user.methods
@current_user.methods(false) #only public and protected singleton methods and also array will not include methods in modules included in @current_user class or parent of it.
또는 개체에 대해 메서드를 호출할 수 있는지 여부를 확인할 수도 있습니다.
@current_user.respond_to?:your_method_name
부모 클래스 메소드를 원하지 않는 경우 부모 클래스 메소드를 제외합니다.
@current_user.methods - @current_user.class.superclass.new.methods #methods that are available to @current_user instance.
사용자가_많은 게시물을 가지고 있다고 가정:
u = User.first
u.posts.methods
u.posts.methods - Object.methods
@clyfe의 대답을 자세히 설명합니다.다음 코드를 사용하여 인스턴스 메서드의 목록을 가져올 수 있습니다("Parser"라는 이름의 개체 클래스가 있다고 가정).
Parser.new.methods - Object.new.methods
언급URL : https://stackoverflow.com/questions/8595184/how-to-list-all-methods-for-an-object-in-ruby
'programing' 카테고리의 다른 글
node.js에서 mongodb에 연결할 때 ECONN 거부 오류가 발생했습니다. (0) | 2023.06.04 |
---|---|
알파벳 순서 대신 ggplot2 x 축을 구체적으로 어떻게 주문합니까? (0) | 2023.06.04 |
도커선.도커 예외:서버 API 버전을 가져오는 중 오류 발생 (0) | 2023.06.04 |
팬더를 사용하여 날짜 및 시간 열 결합 (0) | 2023.06.04 |
Matplotlib의 빈 크기(히스토그램) (0) | 2023.06.04 |