[Rails] enum형에서 같은 enum 이름을 여러 개 정의합니다.
제목에서 보듯이, enum형에서 같은 enum명을 여러 개 정의할 때 오류가 발생하지 않도록 하는 방법
공부를 했기 때문에 출력을 합니다.
그리고 지적할 점이 있다면
교수님을 얻을 수 있었으면 좋겠습니다.
전제 조건
전제는 형식표가 만들어졌고, 열에 enum 형식이 정의되었다는 것입니다.
*간략화를 위해 일부를 생략했습니다.
genre.rb
class Genre < ApplicationRecord
belongs_to :recipe
validates :staple_food, :main_dish, presence: true
enum staple_food: {
others: 0,
rice: 1,
bread: 2,
noodles: 3
}
enum main_dish: {
others: 0,
meat: 1,
fish: 2,
egg: 3,
soybean: 4
}
end
같은 엔음명을 정하면 어떨까요?
enum staple_food: {
others: 0,
...
}
enum main_dish: {
others: 0,
...
}
에서 위에서 말한 바와 같이 others
라는 이름이 중복되면 어떻게 될까요?Genre.create(recipe_id: 4, staple_food: 3, main_dish: 4)
~ `raise_conflict_error': You tried to define an enum named "staple_food" on the model "Genre", but this will generate a instance method "others?", which is already defined by another enum. (ArgumentError)
그렇군요.「"others?"나는 이런 실례적인 방법을 만들고 싶지만 이미 다른 엔움형에 의해 정의되었다.
회피 방법
레일스에서는 같은 이름으로 정의할 수 있도록 정비했다.
You can use the :prefix or :suffix options when you need to define multiple enums with same values. If the passed value is true, the methods are prefixed/suffixed with the name of the enum. It is also possible to supply a custom value:
ActiveRecord::Enum
"같은 값으로 여러 개의 enum을 정의해야 할 때
:prefix
또는 :suffix
를 사용할 수 있다"고 알려주세요.:prefix
는 접두사의 뜻이다. 예를 들어'상담'의'상담'이 바로 이 뜻이다.:suffix
는 접미사를 뜻하는데 예를 들면'그들'의'시'가 바로 이 뜻이다.이번에
:prefix
에 실시될 것이다.genre.rb
class Genre < ApplicationRecord
belongs_to :recipe
validates :staple_food, :main_dish, presence: true
enum staple_food: {
others: 0,
rice: 1,
bread: 2,
noodles: 3
+ }, _prefix: true
enum main_dish: {
others: 0,
meat: 1,
fish: 2,
egg: 3,
soybean: 4
+ }, _prefix: true
end
이제 데이터를 다시 만듭니다.Genre.create(recipe_id: 4, staple_food: 3, main_dish: 4)
TRANSACTION (0.1ms) BEGIN
TRANSACTION (0.4ms) SAVEPOINT active_record_1
Recipe Load (1.0ms) SELECT `recipes`.* FROM `recipes` WHERE `recipes`.`id` = 4 LIMIT 1
Genre Create (0.8ms) INSERT INTO `genres` (`recipe_id`, `staple_food`, `main_dish`, `created_at`, `updated_at`) VALUES (4, 3, 4, ***)
TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1
그렇군요.데이터를 잘 만들 수 있게 됐어!끝까지 읽어주셔서 감사합니다!
Reference
이 문제에 관하여([Rails] enum형에서 같은 enum 이름을 여러 개 정의합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/iloveomelette/articles/141e489e9f311b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)