[RUBY-ON-RAILS] 어떻게 양식 레일의 드롭 다운 <선택> 필드가하는?
RUBY-ON-RAILS어떻게 양식 레일의 드롭 다운 <선택> 필드가하는?
나는 발판을 만드는 오전 -
rails g scaffold Contact email:string email_provider:string
하지만 이메일 공급자가 아닌 텍스트 필드 (옵션으로 Gmail을 / 야후 / MSN과) 드롭 다운되고 싶어요. 이걸 어떻게 할 수 있습니까?
해결법
-
==============================
1.당신은 레일 문서에서 좀 걸릴 수 있습니다. 어쨌든, 당신의 형태 :
당신은 레일 문서에서 좀 걸릴 수 있습니다. 어쨌든, 당신의 형태 :
<%= f.collection_select :provider_id, Provider.order(:name),:id,:name, include_blank: true %>
당신이 추측 할 수, 당신은 다른 모델 -Provider에 이메일 제공 업체를 미리 정의해야하는 위치에서 선택해야 할 수 있습니다.
-
==============================
2.또는 사용자 정의 옵션
또는 사용자 정의 옵션
<%= f.select :desired_attribute, ['option1', 'option2']%>
-
==============================
3.당신은 연락 컨트롤러의 컬렉션을 만들 -
당신은 연락 컨트롤러의 컬렉션을 만들 -
app/controllers/contacts_controller.erb
첨가
@providers = Provider.all.by_name
새에, 작성 및 편집 방법, 공급자 모델의 by_name에 대한 범위를 사용 - 응용 프로그램 / 모델 / provider.rb - 이름 순서에 대한
scope by_name order(:name)
그런 다음보기에서 - 응용 프로그램 / 뷰 / 연락처 / _form.html.erb - 당신은 사용
<%= f.collection_select :provider_id, @providers, :id, :name, include_blank: true %>
https://github.com/plataformatec/simple_form - - 모든 무거운 리프팅을 할 것입니다 레일 형태의 경우, 나는 또한 강력 simple_form 같은 양식 빌더에서 보면 좋습니다.
-
==============================
4.이것은 먼 길 내내,하지만 당신은 아직 구현되지 않은 경우 당신은 원래 이런 식으로 모델을 만들 수 있습니다. 방법은 아래의 기존 데이터베이스를 변경에 대해 설명합니다.
이것은 먼 길 내내,하지만 당신은 아직 구현되지 않은 경우 당신은 원래 이런 식으로 모델을 만들 수 있습니다. 방법은 아래의 기존 데이터베이스를 변경에 대해 설명합니다.
1) 이메일 제공 업체를위한 새로운 모델을 만들기 : $은 g 모델 공급자 이름을 레일
2)이 이름 문자열과 타임 스탬프를 사용하여 모델을 생성합니다. 그것은 또한 우리가 스키마에 추가해야 마이그레이션을 생성합니다 : $ 레이크 DB : 마이그레이션
3) 연락처에 공급자 ID를 추가하는 마이그레이션을 추가 : $은 g 마이그레이션 AddProviderRefToContacts 제공자 레일 : 참조
4) 마이그레이션 파일을 통해 이동 OK 보이게 확인하고 마이그레이션 그것도합니다 : $ 레이크 DB : 마이그레이션
5) 자, 이제 우리는 provider_id을 가지고, 우리는 더 이상 원래의 email_provider 문자열을 필요가 없습니다 : $ 레일 g 이주 RemoveEmailProviderFromContacts
6) 마이그레이션 파일 내부처럼 보일 것이다 변화를 추가 :
class RemoveEmailProviderFromContacts < ActiveRecord::Migration def change remove_column :contacts, :email_provider end end
이 작업이 완료되면 7)의 변화를 마이그레이션 : $ 레이크 DB : 마이그레이션
8)하자 우리의 모델을 업데이트하기 위해 잠시 시간을 내 시어 : 연락처 : belongs_to : 제공 공급자 : has_many : 연락처
9) 다음에, 우리의 의견의 _form.html.erb 부분에 논리 드롭 다운 설정 :
<div class="field"> <%= f.label :provider %><br> <%= f.collection_select :provider_id, Provider.all, :id, :name %> </div>
10) 마지막으로, 우리는 사업자 자신을 추가 할 필요가있다. 한 가지 방법은 위로는 시드 파일을 사용하는 것입니다 않습니다 :
Provider.destroy_all gmail = Provider.create!(name: "gmail") yahoo = Provider.create!(name: "yahoo") msn = Provider.create!(name: "msn")
레이크 DB를 $ : 씨앗을
-
==============================
5.여기 봐주십시오
여기 봐주십시오
어느 쪽이든 당신은 레일 태그를 사용하거나 일반 HTML 태그를 사용할 수 있습니다
태그를 레일
<%= select("Contact", "email_provider", Contact::PROVIDERS, {:include_blank => true}) %>
* HTML 코드 (HTML 태그)를, 아래에 그것을 발견 될 것입니다 코드의 라인 위에 *
HTML 태그
<select name="Contact[email_provider]"> <option></option> <option>yahoo</option> <option>gmail</option> <option>msn</option> </select>
-
==============================
6.모델에서,
모델에서,
class Contact self.email_providers = %w[Gmail Yahoo MSN] validates :email_provider, :inclusion => email_providers end
양식에서,
<%= f.select :email_provider, options_for_select(Contact.email_providers, @contact.email_provider) %>
options_for_select 번째 인수는 현재 어느 email_provider있을 것이다.
-
==============================
7.레일은 기사와 범주 has_many 연결을 사용하여 드롭 다운 :
레일은 기사와 범주 has_many 연결을 사용하여 드롭 다운 :
has_many :articles belongs_to :category <%= form.select :category_id,Category.all.pluck(:name,:id),{prompt:'select'},{class: "form-control"}%>
-
==============================
8.<% = f.select : email_provider [ "의 Gmail ','야후 ','MSN '] %>
<% = f.select : email_provider [ "의 Gmail ','야후 ','MSN '] %>
from https://stackoverflow.com/questions/14113057/how-to-have-a-drop-down-select-field-in-a-rails-form by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 레일 응용 프로그램으로 랩 부트 스트랩 테마를 통합하는? (0) | 2020.02.28 |
---|---|
[RUBY-ON-RAILS] redirect_to하고 교환 렌더링? (0) | 2020.02.28 |
[RUBY-ON-RAILS] 데이터베이스 어댑터에 대한 지정된 'mysql2',하지만 보석이로드되지 않습니다 보석 :: LoadError - 4 레일 (0) | 2020.02.28 |
[RUBY-ON-RAILS] 루비 : PDF 파일을 읽기 (0) | 2020.02.28 |
[RUBY-ON-RAILS] 어떻게 URL에 루비에서 문자열을 인코딩 (0) | 2020.02.27 |