복붙노트

[RUBY-ON-RAILS] 어떻게 양식 레일의 드롭 다운 <선택> 필드가하는?

RUBY-ON-RAILS

어떻게 양식 레일의 드롭 다운 <선택> 필드가하는?

나는 발판을 만드는 오전 -

rails g scaffold Contact email:string email_provider:string 

하지만 이메일 공급자가 아닌 텍스트 필드 (옵션으로 Gmail을 / 야후 / MSN과) 드롭 다운되고 싶어요. 이걸 어떻게 할 수 있습니까?

해결법

  1. ==============================

    1.당신은 레일 문서에서 좀 걸릴 수 있습니다. 어쨌든, 당신의 형태 :

    당신은 레일 문서에서 좀 걸릴 수 있습니다. 어쨌든, 당신의 형태 :

      <%= f.collection_select :provider_id, Provider.order(:name),:id,:name, include_blank: true %>
    

    당신이 추측 할 수, 당신은 다른 모델 -Provider에 이메일 제공 업체를 미리 정의해야하는 위치에서 선택해야 할 수 있습니다.

  2. ==============================

    2.또는 사용자 정의 옵션

    또는 사용자 정의 옵션

    <%= f.select :desired_attribute, ['option1', 'option2']%>
    
  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    8.<% = f.select : email_provider [ "의 Gmail ','야후 ','MSN '] %>

    <% = f.select : email_provider [ "의 Gmail ','야후 ','MSN '] %>

  9. 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