[ruby-on-rails] Ruby에서 객체의 모든 메소드를 나열하는 방법은 무엇입니까?
특정 개체가 액세스 할 수있는 모든 메서드를 어떻게 나열합니까?
@current_user
응용 프로그램 컨트롤러에 정의 된 개체 가 있습니다 .
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
보기 파일에서 내가 사용할 수있는 방법을보고 싶습니다. 특히, :has_many
협회가 제공 하는 방법을보고 싶습니다 . (무엇 :has_many
을 제공 해야하는지 알고 있지만 확인하고 싶습니다.)
답변
다음은 기본 Object 클래스에없는 User 클래스의 메서드 목록입니다.
>> 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 클래스의 메서드입니다.
>> 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_many 관계의 결과로 생성 된 방법을 참고 하지 의 결과에methods
호출 .
추가됨 : has_many는 메소드를 직접 추가하지 않습니다. 대신 ActiveRecord 기계는 Ruby method_missing
및 responds_to
기술을 사용하여 즉시 메서드 호출을 처리합니다. 결과적으로 메서드는 methods
메서드 결과에 나열되지 않습니다 .
답변
수신자의 공용 및 보호 된 인스턴스 메서드의 이름을 포함하는 배열을 반환합니다. 모듈의 경우 이는 공용 및 보호 된 메소드입니다. 클래스의 경우 인스턴스 (단일 항목이 아님) 메서드입니다. 인수가 없거나 거짓 인 인수를 사용하면 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
답변
또는 User.methods(false)
해당 클래스 내에 정의 된 메서드 만 반환합니다.
답변
넌 할 수있어
current_user.methods
더 나은 목록을 위해
puts "\n\current_user.methods : "+ current_user.methods.sort.join("\n").to_s+"\n\n"
답변
이 중 하나는 어떻습니까?
object.methods.sort
Class.methods.sort
답변
사용자 has_many 게시물이 있다고 가정합니다.
u = User.first
u.posts.methods
u.posts.methods - Object.methods
답변
@clyfe의 대답을 설명합니다. 다음 코드를 사용하여 인스턴스 메소드 목록을 가져올 수 있습니다 ( “Parser”라는 객체 클래스가 있다고 가정).
Parser.new.methods - Object.new.methods