[Rails] 테이블 명이 헷갈릴 때

이번에 만드는 테이블 중에 LessonData라는 이름의 테이블을 만들어야 했는데 이 경우에 Model 명을 어떻게 지어야 하는 지 헷갈렸다. 모델명이 LessonDatum이 되어야하는지 테이블 명이 LessonDatas가 되고 모델명이 LessonData가 되어야하는 지 헷갈렸는데 일단 결론부터 말하자면 테이블 명을 LessonData, 모델명을 LessonDatum으로 하는 것이 맞았다.

영어에 익숙하지 않아서 Rails의 복수화 컨벤션이 헷갈리는 부분이 있는데 이럴 때에는 Rails::ActiveSupport::Inflector에 있는 메써드를 참고하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Create the name of a table like Rails does for models to table names. This
# method uses the +pluralize+ method on the last word in the string.
#
#   'RawScaledScorer'.tableize # => "raw_scaled_scorers"
#   'egg_and_ham'.tableize     # => "egg_and_hams"
#   'fancyCategory'.tableize   # => "fancy_categories"
def tableize(class_name)
  pluralize(underscore(class_name))
end

# Create a class name from a plural table name like Rails does for table
# names to models. Note that this returns a string and not a Class (To
# convert to an actual class follow +classify+ with +constantize+).
#
#   'egg_and_hams'.classify # => "EggAndHam"
#   'posts'.classify        # => "Post"
#
# Singular names are not handled correctly:
#
#   'business'.classify     # => "Busines"
def classify(table_name)
  # strip out any leading schema name
  camelize(singularize(table_name.to_s.sub(/.*\./, '')))
end

위의 코드와 같이 #tableize#classify를 이용하면 쉽게 네이밍할 수 있다.