【Rails】enum 컬럼용 select Form Helper 구현
10518 단어 RailsActiveRecord
추가
gem으로 만들었습니다 ⇢ enum_select_rails
전제
사용자 작성
$ bundle exec rails g scaffold User name:string gender:integer
gender 열은 enum을 적용하여 정수 값을 저장합니다.
초기 상태의 양식은 아래 그림과 같습니다.
enum 정의
app/models/user.rbclass User < ApplicationRecord
enum gender: {
female: 0,
male: 1,
unanswered: 2
}
end
enum에 맞게 양식 변경
모델에 enum을 정의하면 다음과 같이 enum 목록을 얻을 수 있습니다.number_field
대신 select
로 변경하십시오.
app/views/users/_form.html.erb<!-- 初期状態 -->
<div class="field">
<%= f.label :gender %>
<%= f.number_field :gender %>
</div>
<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders.keys.map {|k| [k, k]} %>
</div>
i18n 대응
enum_help 설치
이 gem을 사용하여 i18n의 일본어 문자열을 다루기 쉽습니다.
Gemfilegem 'enum_help'
설정 추가
application.rb를 업데이트하여 자체 제작 된 로케일을 읽습니다.
config/application.rb# i18n
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
config.i18n.available_locales = [:ja, :en]
locale 작성
locale 파일을 만듭니다.User.genders_i18n
와 같이 접미사에 _i18n
를 붙이면 다음과 같이 정의 된 값을 얻을 수 있습니다.
config/locales/models/user/en.ymlja:
activerecord:
models:
user: ユーザー
attributes:
user:
name: 氏名
gender: 性別
enums:
user:
gender:
female: 女性
male: 男性
unanswered: 未回答
양식 업데이트
app/views/users/_form.html.erb<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders_i18n.keys.map {|k| [User.genders_i18n[k], k]} %>
</div>
이렇게 Select를 일본어화할 수 있다.
Form Helper 확장
매번 쓰는 것은 중복이므로 공통화됩니다.
config/initializer/extensions/form_helper_extension.rbclass ActionView::Helpers::FormBuilder
def enum_select(record, options = {}, html_options = {})
pluralized = record.to_s.pluralize
klass = self.object.class
base = klass.send(pluralized)
i18n = klass.send("#{pluralized}_i18n")
select record.to_sym, base.keys.map { |k| [i18n[k], k] }, options, html_options
end
end
enum_select
적용.
app/views/users/_form.html.erb<div class="field">
<%= f.label :gender %>
<%= f.enum_select :gender %>
</div>
젬/샘플
$ bundle exec rails g scaffold User name:string gender:integer
app/models/user.rb
class User < ApplicationRecord
enum gender: {
female: 0,
male: 1,
unanswered: 2
}
end
enum에 맞게 양식 변경
모델에 enum을 정의하면 다음과 같이 enum 목록을 얻을 수 있습니다.number_field
대신 select
로 변경하십시오.
app/views/users/_form.html.erb<!-- 初期状態 -->
<div class="field">
<%= f.label :gender %>
<%= f.number_field :gender %>
</div>
<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders.keys.map {|k| [k, k]} %>
</div>
i18n 대응
enum_help 설치
이 gem을 사용하여 i18n의 일본어 문자열을 다루기 쉽습니다.
Gemfilegem 'enum_help'
설정 추가
application.rb를 업데이트하여 자체 제작 된 로케일을 읽습니다.
config/application.rb# i18n
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
config.i18n.available_locales = [:ja, :en]
locale 작성
locale 파일을 만듭니다.User.genders_i18n
와 같이 접미사에 _i18n
를 붙이면 다음과 같이 정의 된 값을 얻을 수 있습니다.
config/locales/models/user/en.ymlja:
activerecord:
models:
user: ユーザー
attributes:
user:
name: 氏名
gender: 性別
enums:
user:
gender:
female: 女性
male: 男性
unanswered: 未回答
양식 업데이트
app/views/users/_form.html.erb<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders_i18n.keys.map {|k| [User.genders_i18n[k], k]} %>
</div>
이렇게 Select를 일본어화할 수 있다.
Form Helper 확장
매번 쓰는 것은 중복이므로 공통화됩니다.
config/initializer/extensions/form_helper_extension.rbclass ActionView::Helpers::FormBuilder
def enum_select(record, options = {}, html_options = {})
pluralized = record.to_s.pluralize
klass = self.object.class
base = klass.send(pluralized)
i18n = klass.send("#{pluralized}_i18n")
select record.to_sym, base.keys.map { |k| [i18n[k], k] }, options, html_options
end
end
enum_select
적용.
app/views/users/_form.html.erb<div class="field">
<%= f.label :gender %>
<%= f.enum_select :gender %>
</div>
젬/샘플
<!-- 初期状態 -->
<div class="field">
<%= f.label :gender %>
<%= f.number_field :gender %>
</div>
<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders.keys.map {|k| [k, k]} %>
</div>
enum_help 설치
이 gem을 사용하여 i18n의 일본어 문자열을 다루기 쉽습니다.
Gemfile
gem 'enum_help'
설정 추가
application.rb를 업데이트하여 자체 제작 된 로케일을 읽습니다.
config/application.rb
# i18n
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
config.i18n.available_locales = [:ja, :en]
locale 작성
locale 파일을 만듭니다.
User.genders_i18n
와 같이 접미사에 _i18n
를 붙이면 다음과 같이 정의 된 값을 얻을 수 있습니다.config/locales/models/user/en.yml
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
name: 氏名
gender: 性別
enums:
user:
gender:
female: 女性
male: 男性
unanswered: 未回答
양식 업데이트
app/views/users/_form.html.erb
<!-- 下記に変更 -->
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, User.genders_i18n.keys.map {|k| [User.genders_i18n[k], k]} %>
</div>
이렇게 Select를 일본어화할 수 있다.
Form Helper 확장
매번 쓰는 것은 중복이므로 공통화됩니다.
config/initializer/extensions/form_helper_extension.rbclass ActionView::Helpers::FormBuilder
def enum_select(record, options = {}, html_options = {})
pluralized = record.to_s.pluralize
klass = self.object.class
base = klass.send(pluralized)
i18n = klass.send("#{pluralized}_i18n")
select record.to_sym, base.keys.map { |k| [i18n[k], k] }, options, html_options
end
end
enum_select
적용.
app/views/users/_form.html.erb<div class="field">
<%= f.label :gender %>
<%= f.enum_select :gender %>
</div>
젬/샘플
class ActionView::Helpers::FormBuilder
def enum_select(record, options = {}, html_options = {})
pluralized = record.to_s.pluralize
klass = self.object.class
base = klass.send(pluralized)
i18n = klass.send("#{pluralized}_i18n")
select record.to_sym, base.keys.map { |k| [i18n[k], k] }, options, html_options
end
end
<div class="field">
<%= f.label :gender %>
<%= f.enum_select :gender %>
</div>
Reference
이 문제에 관하여(【Rails】enum 컬럼용 select Form Helper 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanakaworld/items/ece8718974e14d5a1e55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)