Bu mini yazıda grouped_collection_select yardımcı form elemanı ile nasıl gruplanmış select yapabiliriz ona bakacağız.
Senaryoda İl ve İlçeler olsun. Bu il veya ilçeye ait ilişkili bir yazı ekleyebilelim. İlçelerin listelendiği bir selectbox düşünelim ve ilçeleri illere göre gruplayalım.
1 2 3 4 |
class City < ActiveRecord::Base has_many :towns has_many :articles end |
1 2 3 4 |
class Town < ActiveRecord::Base belongs_to :city has_many :articles end |
1 2 3 4 |
class Article < ActiveRecord::Base belongs_to :city belongs_to :town end |
Aralarındaki ilişkiler bu şekilde. Şimdi article için ilçe seçebileceği bir select formu oluşturalım.
1 2 3 4 5 6 |
class ArticlesController < ApplicationController def new @Article = Article.new @Cities = City.all.order(name: :asc) end end |
1 2 |
=form_for @Article do |f| =f.grouped_collection_select :town_id, @Cities, :towns, :name, :id, :name, {include_blank:"İlçe Seçiniz - Yok"} |
Burada grouped_collection_select methoduna gönderdiğimiz parametreleri açıklayacak olursak;
- :town_id – Article modelinde bulunan, Town modeli ile ilişki kurduğumuz id alanı.
- @Cities – articles_controller.rb dosyasında illeri çektik. Bunlar grup başlığı olacak.
- :towns – @Cities içerisindeki her bir eleman (city) ile ilişkili listelenmesini istediğimiz (option tagı şeklinde listelenecek) ilçeler.
- :name – @Cities grup başlığı olacak demiştik. Burada @Cities içindeki her bir eleman için başlınta görünmesini istediğimiz alanını belirliyoruz. Ben İl’in adı görünsün istiyorum o nedenle :name dedim.
- :id – Seçilebilir olan option tagları için value değeri town’a ait olan id olsun istiyorum.
- :name – option tagları için görünmesini istediğin ilçe(town)’nin ismi.
Sonuç olarak elde edeceğimiz görüntü şu görseldeki gibi olacaktır.
Bir cevap yazın