2014-03-28 2 views
0

이 ActiveRecord 퍼즐을 얻었으므로 어느 누구도 self (self is Student) 테이블에서 "students"테이블을 추출하는 더 나은 방법을 알아낼 수 없습니다.이 이름을 바꾸는 더 나은 '레일'방법이 있습니까?

def self.all 
    p self     # = Student 
    Database::Model.execute("SELECT * FROM #{self.to_s.downcase + "s"}").map do |row| 
    self.new(row) 
    end 
end 

이 문자열 조작이 가장 좋은 방법입니까?

답변

1

내가 당신의 의도에 대한 오해하지 않다 경우 , Student.all이 일반적으로하는 일입니다.

Student"students"이되는 방법에 대해 궁금한 점이 있으면 기본적으로 .class.name.downcase.pluralize (기본 테이블 이름을 유지하는 경우)이 포함됩니다. pluralize은 문자열에 "s"을 추가하는 것보다 훨씬 똑똑합니다.

+0

ah - ok -이 과제에 사용할 수있는 레일 방법이없는 것 같지만 시간이되면 새로운 방법을 사용할 수 있습니다. 감사! – dwilbank

+0

'pluralize'는 레일즈의 일부입니다; 내가 나열한 다른 모든 것은 표준 Ruby입니다. – Amadan

+0

BTW - 나는 단지 SQL 명령을 사용하여 activerecord 메소드 "all"을 복제해야한다고 생각합니다. – dwilbank

1

모델에이 메서드를 추가하여 모델에서 사용하는 테이블 이름을 반영하는 문자열을 얻는 것처럼 보입니다. 아마도. 그건 그냥 효과적으로 별칭을 만들어 있기 때문에, 당신이 할 수

def self.all 
    table_name 
end 

을 또는 :

그렇다면, 당신은이 작업을 수행 할 수

ModelName.table_name

관련 문제