Ruby on Rails 5.2 - ActionView::Helpers::FormOptionsHelper

मॉड्यूल ActionView :: सहायक :: FormOptionsHelper




ruby

मॉड्यूल ActionView :: सहायक :: FormOptionsHelper

शामिल मॉड्यूल:
ActionView::Helpers::TextHelper

विभिन्न प्रकार के कंटेनरों को विकल्प टैग के सेट में बदलने के लिए कई तरीके प्रदान करता है।

time_zone_select , select और time_zone_select तरीके एक options पैरामीटर, एक हैश लेते हैं:

  • :include_blank - सही या एक त्वरित स्ट्रिंग पर सेट करें यदि चयन तत्व का पहला विकल्प तत्व रिक्त है। उपयोगी अगर वहाँ चयनित तत्व के लिए आवश्यक एक डिफ़ॉल्ट मान नहीं है।

    select("post", "category", Post::CATEGORIES, {include_blank: true})
    

    हो सकता हे:

    <select name="post[category]" id="post_category">
      <option value=""></option>
      <option value="joke">joke</option>
      <option value="poem">poem</option>
    </select>

    एक अन्य सामान्य मामला एक rel_to -associated ऑब्जेक्ट के लिए एक चयनित टैग है।

    @post.person_id => 2 साथ उदाहरण @post.person_id => 2 :

    select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'None'})
    

    हो सकता हे:

    <select name="post[person_id]" id="post_person_id">
      <option value="">None</option>
      <option value="1">David</option>
      <option value="2" selected="selected">Eileen</option>
      <option value="3">Rafael</option>
    </select>
  • :prompt - सही पर सेट या एक त्वरित स्ट्रिंग। जब चयनित तत्व का अभी तक कोई मूल्य नहीं है, तो यह एक विकल्प को जेनेरिक प्रॉम्प्ट - "कृपया चयन करें" - या दिए गए प्रॉम्प्ट स्ट्रिंग के साथ प्रस्तुत करता है।

    select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {prompt: 'Select Person'})
    

    हो सकता हे:

    <select name="post[person_id]" id="post_person_id">
      <option value="">Select Person</option>
      <option value="1">David</option>
      <option value="2">Eileen</option>
      <option value="3">Rafael</option>
    </select>
  • :index - अन्य फॉर्म हेल्पर्स की तरह, select कर सकते हैं :index ऑप्शन मैन्युअल रूप से परिणामी आउटपुट में उपयोग की गई आईडी को सेट करने के लिए। अन्य सहायकों के विपरीत, इस विकल्प का select html_options पैरामीटर में होने की html_options है।

    select("album[]", "genre", %w[rap rock country], {}, { index: nil })
    

    हो जाता है:

    <select name="album[][genre]" id="album__genre">
      <option value="rap">rap</option>
      <option value="rock">rock</option>
      <option value="country">country</option>
    </select>
  • :disabled - एक एकल मान या मान हो सकता है जो अंतिम आउटपुट में अक्षम विकल्प होंगे।

    select("post", "category", Post::CATEGORIES, {disabled: 'restricted'})
    

    हो सकता हे:

    <select name="post[category]" id="post_category">
      <option value=""></option>
      <option value="joke">joke</option>
      <option value="poem">poem</option>
      <option disabled="disabled" value="restricted">restricted</option>
    </select>

    जब संग्रह_सेप्ट हेल्पर के साथ उपयोग किया जाता है :disabled भी एक प्रोक हो सकता है जो उन विकल्पों की पहचान करता है जिन्हें अक्षम किया जाना चाहिए।

    collection_select(:post, :category_id, Category.all, :id, :name, {disabled: -> (category) { category.archived? }})
    

    यदि श्रेणियाँ "2008 सामान" और "क्रिसमस" सही है, जब विधि archived? कहा जाता है, यह वापस आ जाएगा:

    <select name="post[category_id]" id="post_category_id">
      <option value="1" disabled="disabled">2008 stuff</option>
      <option value="2" disabled="disabled">Christmas</option>
      <option value="3">Jokes</option>
      <option value="4">Poems</option>
    </select>

सार्वजनिक प्रवृत्ति के तरीके

collection_check_boxes (ऑब्जेक्ट, विधि, संग्रह, मान_method, text_method, विकल्प = {}, html_options = {}, और ब्लॉक) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 756
def collection_check_boxes(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
  Tags::CollectionCheckBoxes.new(object, method, self, collection, value_method, text_method, options, html_options).render(&block)
end

रिटर्न object के वर्ग के लिए मौजूदा वापसी मूल्यों के संग्रह के लिए चेक बॉक्स टैग करता है। इंस्टेंस object पर कॉलिंग method से लौटाए गए मान का चयन किया जाएगा। यदि कॉलिंग method nil , तो कोई चयन नहीं किया जाता है।

:value_method और :text_method पैरामीटर, collection प्रत्येक सदस्य को बुलाए जाने वाले तरीके हैं। रिटर्न मान का उपयोग क्रमशः प्रत्येक चेक बॉक्स टैग के value विशेषता और सामग्री के रूप में किया जाता है। वे कोई भी वस्तु हो सकते हैं जो call करने के लिए प्रतिक्रिया करता है, जैसे कि एक खरीद, जिसे मूल्य / पाठ को पुनः प्राप्त करने के लिए collection प्रत्येक सदस्य को बुलाया जाएगा।

इस विधि के साथ उपयोग के लिए उदाहरण ऑब्जेक्ट संरचना:

class Post < ActiveRecord::Base
  has_and_belongs_to_many :authors
end
class Author < ActiveRecord::Base
  has_and_belongs_to_many :posts
  def name_with_initial
    "#{first_name.first}. #{last_name}"
  end
end

नमूना उपयोग (पोस्ट, @post पोस्ट की आवृत्ति के लिए संबंधित लेखक का चयन):

collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial)

यदि @post.author_ids पहले से ही [1] , तो यह वापस आ जाएगी:

<input id="post_author_ids_1" name="post[author_ids][]" type="checkbox" value="1" checked="checked" />
<label for="post_author_ids_1">D. Heinemeier Hansson</label>
<input id="post_author_ids_2" name="post[author_ids][]" type="checkbox" value="2" />
<label for="post_author_ids_2">D. Thomas</label>
<input id="post_author_ids_3" name="post[author_ids][]" type="checkbox" value="3" />
<label for="post_author_ids_3">M. Clark</label>
<input name="post[author_ids][]" type="hidden" value="" />

तत्वों को एक विधि को ब्लॉक करके जिस तरह से दिखाया जाएगा उसे अनुकूलित करना भी संभव है:

collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b|
  b.label { b.check_box }
end

ब्लॉक को दिया गया तर्क इस संग्रह के लिए एक विशेष प्रकार का बिल्डर है, जिसमें उचित पाठ और मूल्य के साथ संग्रह में वर्तमान आइटम के लिए लेबल और चेक बॉक्स उत्पन्न करने की क्षमता है। इसका उपयोग करके, आप लेबल को बदल सकते हैं और बॉक्स डिस्प्ले ऑर्डर को चेक कर सकते हैं या लेबल को रैपर के रूप में भी उपयोग कर सकते हैं, जैसा कि ऊपर दिए गए उदाहरण में है।

बिल्डर तरीके label और check_box भी अतिरिक्त HTML विकल्प स्वीकार करते हैं:

collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b|
  b.label(class: "check_box") { b.check_box(class: "check_box") }
end

तीन विशेष विधियाँ भी उपलब्ध हैं: object , text और value , जो वर्तमान वस्तु का प्रतिपादन कर रहे हैं, क्रमशः इसका पाठ और मूल्य विधियाँ। आप उन्हें इस तरह से उपयोग कर सकते हैं:

collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b|
   b.label(:"data-value" => b.value) { b.check_box + b.text }
end

पकड़ लिया

जब चेकबॉक्स के संग्रह के लिए कोई चयन नहीं किया जाता है, तो अधिकांश वेब ब्राउज़र कोई मूल्य नहीं भेजेंगे।

उदाहरण के लिए, यदि हमारे पास category_ids फ़ील्ड के साथ एक User मॉडल है और हमारे अपडेट एक्शन में निम्नलिखित कोड हैं:

@user.update(params[:user])

यदि कोई category_ids नहीं चुनी जाती है तो हम सुरक्षित रूप से मान सकते हैं कि यह फ़ील्ड अपडेट नहीं की जाएगी।

यह चेकबॉक्स के हर संग्रह के लिए सहायक विधि द्वारा उत्पन्न एक छिपे हुए क्षेत्र के लिए संभव है। इस छिपे हुए फ़ील्ड को एक खाली मान के साथ चेकबॉक्स के समान फ़ील्ड नाम दिया गया है।

दुर्लभ मामले में आप इस छिपे हुए क्षेत्र को नहीं चाहते हैं, तो आप शामिल कर सकते include_hidden: false सहायक विधि के लिए include_hidden: false विकल्प।

collection_radio_buttons (ऑब्जेक्ट, विधि, संग्रह, मान_method, text_method, विकल्प = {}, html_options = {}, और ब्लॉक) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 672
def collection_radio_buttons(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
  Tags::CollectionRadioButtons.new(object, method, self, collection, value_method, text_method, options, html_options).render(&block)
end

object के वर्ग के लिए method के मौजूदा रिटर्न मानों के संग्रह के लिए रिटर्न रेडियो बटन टैग। इंस्टेंस object पर कॉलिंग method से लौटाए गए मान का चयन किया जाएगा। यदि कॉलिंग method nil , तो कोई चयन नहीं किया जाता है।

:value_method और :text_method पैरामीटर, collection प्रत्येक सदस्य को बुलाए जाने वाले तरीके हैं। रिटर्न मान का उपयोग क्रमशः प्रत्येक रेडियो बटन टैग के value विशेषता और सामग्री के रूप में किया जाता है। वे कोई भी वस्तु हो सकते हैं जो call करने के लिए प्रतिक्रिया करता है, जैसे कि एक खरीद, जिसे मूल्य / पाठ को पुनः प्राप्त करने के लिए collection प्रत्येक सदस्य को बुलाया जाएगा।

इस विधि के साथ उपयोग के लिए उदाहरण ऑब्जेक्ट संरचना:

class Post < ActiveRecord::Base
  belongs_to :author
end
class Author < ActiveRecord::Base
  has_many :posts
  def name_with_initial
    "#{first_name.first}. #{last_name}"
  end
end

नमूना उपयोग (पोस्ट, @post पोस्ट की आवृत्ति के लिए संबंधित लेखक का चयन):

collection_radio_buttons(:post, :author_id, Author.all, :id, :name_with_initial)

यदि @post.author_id पहले से 1 , तो यह वापस आ जाएगी:

<input id="post_author_id_1" name="post[author_id]" type="radio" value="1" checked="checked" />
<label for="post_author_id_1">D. Heinemeier Hansson</label>
<input id="post_author_id_2" name="post[author_id]" type="radio" value="2" />
<label for="post_author_id_2">D. Thomas</label>
<input id="post_author_id_3" name="post[author_id]" type="radio" value="3" />
<label for="post_author_id_3">M. Clark</label>

तत्वों को एक विधि को ब्लॉक करके जिस तरह से दिखाया जाएगा उसे अनुकूलित करना भी संभव है:

collection_radio_buttons(:post, :author_id, Author.all, :id, :name_with_initial) do |b|
  b.label { b.radio_button }
end

ब्लॉक को दिया गया तर्क इस संग्रह के लिए एक विशेष प्रकार का बिल्डर है, जो उचित पाठ और मूल्य के साथ संग्रह में वर्तमान आइटम के लिए लेबल और रेडियो बटन उत्पन्न करने की क्षमता रखता है। इसका उपयोग करके, आप लेबल और रेडियो बटन डिस्प्ले ऑर्डर को बदल सकते हैं या यहां तक ​​कि आवरण के रूप में लेबल का उपयोग कर सकते हैं, जैसा कि ऊपर दिए गए उदाहरण में है।

बिल्डर तरीके label और radio_button अतिरिक्त HTML विकल्प भी स्वीकार करते हैं:

collection_radio_buttons(:post, :author_id, Author.all, :id, :name_with_initial) do |b|
  b.label(class: "radio_button") { b.radio_button(class: "radio_button") }
end

तीन विशेष विधियाँ भी उपलब्ध हैं: object , text और value , जो वर्तमान वस्तु का प्रतिपादन कर रहे हैं, क्रमशः इसका पाठ और मूल्य विधियाँ। आप उन्हें इस तरह से उपयोग कर सकते हैं:

collection_radio_buttons(:post, :author_id, Author.all, :id, :name_with_initial) do |b|
   b.label(:"data-value" => b.value) { b.radio_button + b.text }
end

पकड़ लिया

HTML विनिर्देशन कहता है कि जब रेडियो बटन के संग्रह पर कुछ भी नहीं चुना जाता है तो वेब ब्राउज़र सर्वर पर कोई मूल्य नहीं भेजते हैं। दुर्भाग्य से यह एक गोचर का परिचय देता है: यदि User मॉडल में एक category_id फ़ील्ड है और प्रपत्र में कोई श्रेणी चयनित नहीं है, तो कोई category_id पैरामीटर नहीं भेजा जाता है। तो, किसी भी मजबूत मापदंडों मुहावरे की तरह:

params.require(:user).permit(...)

कोई {user: ...} मौजूद होने के बाद से एक त्रुटि होगी।

इसे रोकने के लिए सहायक रेडियो बटन के हर संग्रह से पहले एक सहायक छिपा हुआ क्षेत्र उत्पन्न करता है। छिपे हुए फ़ील्ड का संग्रह रेडियो बटन और रिक्त मान के समान नाम है।

यदि आप चाहते हैं कि सहायक इस छिपे हुए क्षेत्र को उत्पन्न न करे तो आप इसमें शामिल कर सकते हैं include_hidden: false विकल्प।

collection_select (ऑब्जेक्ट, विधि, संग्रह, मान_method, text_method, विकल्प = {}, html_options = {}) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 203
def collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
  Tags::CollectionSelect.new(object, method, self, collection, value_method, text_method, options, html_options).render
end

रिटर्न <select> और <option> object के वर्ग के लिए method के मौजूदा रिटर्न मानों के संग्रह के लिए टैग। इंस्टेंस object पर कॉलिंग method से लौटाए गए मान को चुना जाएगा। यदि कॉलिंग method nil , तो विकल्प के बिना कोई चयन नहीं किया जाता है :prompt या :include_blank में शामिल options

:value_method और :text_method पैरामीटर, collection प्रत्येक सदस्य को बुलाए जाने वाले तरीके हैं। रिटर्न मान का उपयोग क्रमशः प्रत्येक <option> टैग के value विशेषता और सामग्री के रूप में किया जाता है। वे कोई भी वस्तु हो सकते हैं जो call करने के लिए प्रतिक्रिया करता है, जैसे कि एक खरीद, जिसे मूल्य / पाठ को पुनः प्राप्त करने के लिए collection प्रत्येक सदस्य को बुलाया जाएगा।

इस विधि के साथ उपयोग के लिए उदाहरण ऑब्जेक्ट संरचना:

class Post < ActiveRecord::Base
  belongs_to :author
end

class Author < ActiveRecord::Base
  has_many :posts
  def name_with_initial
    "#{first_name.first}. #{last_name}"
  end
end

नमूना उपयोग (पोस्ट, @post पोस्ट की आवृत्ति के लिए संबंधित लेखक का चयन):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true)

यदि @post.author_id पहले से 1 , तो यह वापस आ जाएगी:

<select name="post[author_id]" id="post_author_id">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>
grouped_collection_select (ऑब्जेक्ट, विधि, संग्रह, group_method, group_label_method, option_key_method, option_value_method, विकल्प = {}, html_option = {}) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 263
def grouped_collection_select(object, method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
  Tags::GroupedCollectionSelect.new(object, method, self, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options).render
end

रिटर्न <select> , <optgroup> और <option> object के वर्ग के लिए मौजूदा रिटर्न मानों के संग्रह के लिए टैग। इंस्टेंस object पर कॉलिंग method से लौटाए गए मान का चयन किया जाएगा। यदि कॉलिंग method nil , तो विकल्प के बिना कोई चयन नहीं किया जाता है :prompt या :include_blank में शामिल options

पैरामीटर:

  • object - चयनित टैग के लिए उपयोग किए जाने वाले वर्ग का उदाहरण

  • method - चयनित टैग के अनुरूप object की विशेषता

  • collection - वस्तुओं की एक सरणी <optgroup> टैग का प्रतिनिधित्व करती है।

  • group_method - एक विधि का नाम, जिसे collection सदस्य पर बुलाया जाता है, <option> टैग का प्रतिनिधित्व करने वाली बाल वस्तुओं की एक सरणी देता है। यह ऐसी कोई भी वस्तु भी हो सकती है जो call करने के लिए प्रतिक्रिया करती है, जैसे कि एक proc , जिसे मूल्य को पुनः प्राप्त करने के लिए collection प्रत्येक सदस्य के लिए बुलाया जाएगा।

  • group_label_method - एक विधि का नाम, जिसे collection सदस्य को कॉल करने पर, उसके <optgroup> टैग के लिए label विशेषता के रूप में उपयोग की जाने वाली स्ट्रिंग लौटाती है। यह ऐसी कोई भी वस्तु भी हो सकती है जो call करने के लिए प्रतिक्रिया करती है, जैसे कि एक proc , जिसे लेबल को पुनः प्राप्त करने के लिए collection प्रत्येक सदस्य के लिए बुलाया जाएगा।

  • option_key_method - एक विधि का नाम, जिसे collection सदस्य के एक बच्चे की वस्तु पर बुलाया जाता है, एक मूल्य को उसके <option> टैग के लिए value विशेषता के रूप में उपयोग किया जाता है।

  • option_value_method - एक विधि का नाम, जिसे collection सदस्य के एक बच्चे की वस्तु पर बुलाया जाता है, उसके <option> टैग की सामग्री के रूप में उपयोग किए जाने के लिए एक मान देता है।

इस विधि के साथ उपयोग के लिए उदाहरण ऑब्जेक्ट संरचना:

class Continent < ActiveRecord::Base
  has_many :countries
  # attribs: id, name
end

class Country < ActiveRecord::Base
  belongs_to :continent
  # attribs: id, name, continent_id
end

class City < ActiveRecord::Base
  belongs_to :country
  # attribs: id, name, country_id
end

नमूना उपयोग:

grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name)

संभव उत्पादन:

<select name="city[country_id]" id="city_country_id">
  <optgroup label="Africa">
    <option value="1">South Africa</option>
    <option value="3">Somalia</option>
  </optgroup>
  <optgroup label="Europe">
    <option value="7" selected="selected">Denmark</option>
    <option value="2">Ireland</option>
  </optgroup>
</select>
grouped_options_for_select (grouped_options, चयनित_की = शून्य, विकल्प = {}) स्रोत दिखाएं
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 531
def grouped_options_for_select(grouped_options, selected_key = nil, options = {})
  prompt  = options[:prompt]
  divider = options[:divider]

  body = "".html_safe

  if prompt
    body.safe_concat content_tag("option".freeze, prompt_text(prompt), value: "")
  end

  grouped_options.each do |container|
    html_attributes = option_html_attributes(container)

    if divider
      label = divider
    else
      label, container = container
    end

    html_attributes = { label: label }.merge!(html_attributes)
    body.safe_concat content_tag("optgroup".freeze, options_for_select(container, selected_key), html_attributes)
  end

  body
end

<option> की एक स्ट्रिंग लौटाता है <option> टैग <option> , जैसे कि options_for_select , लेकिन उन्हें <optgroup> टैग के साथ लपेटता है:

grouped_options = [
 ['North America',
   [['United States','US'],'Canada']],
 ['Europe',
   ['Denmark','Germany','France']]
]
grouped_options_for_select(grouped_options)

grouped_options = {
  'North America' => [['United States','US'], 'Canada'],
  'Europe' => ['Denmark','Germany','France']
}
grouped_options_for_select(grouped_options)

संभव उत्पादन:

<optgroup label="North America">
  <option value="US">United States</option>
  <option value="Canada">Canada</option>
</optgroup>
<optgroup label="Europe">
  <option value="Denmark">Denmark</option>
  <option value="Germany">Germany</option>
  <option value="France">France</option>
</optgroup>

पैरामीटर:

  • grouped_options - एक नेस्टेड सरणी या स्ट्रिंग्स के हैश को स्वीकार करता है। पहला मान <optgroup> लेबल के रूप में कार्य करता है जबकि दूसरा मान विकल्पों की एक सरणी होना चाहिए। दूसरा मान पाठ-मूल्य जोड़े का एक नेस्टेड सरणी हो सकता है। अधिक जानकारी के लिए options_for_select देखें।

    Ex. ["North America",[["United States","US"],["Canada","CA"]]]
  • selected_key - एक मूल्य के बराबर value <option> टैग के लिए, जिसमें selected विशेषता सेट होगा। नोट: इस मूल्य के लिए कई विकल्पों का मिलान करना संभव है क्योंकि आपके पास कई समूहों में एक ही विकल्प हो सकता है। प्रत्येक तब selected="selected" हो जाएगा selected="selected"

विकल्प:

  • :prompt - सही पर सेट या एक त्वरित स्ट्रिंग। जब चयनित तत्व का अभी तक कोई मूल्य नहीं है, तो यह एक विकल्प को जेनेरिक प्रॉम्प्ट - "कृपया चयन करें" - या दिए गए प्रॉम्प्ट स्ट्रिंग के साथ प्रस्तुत करता है।

  • :divider - विकल्प समूहों के लिए विभक्त।

    grouped_options = [
      [['United States','US'], 'Canada'],
      ['Denmark','Germany','France']
    ]
    grouped_options_for_select(grouped_options, nil, divider: '---------')
    

    संभव उत्पादन:

    <optgroup label="---------">
      <option value="US">United States</option>
      <option value="Canada">Canada</option>
    </optgroup>
    <optgroup label="---------">
      <option value="Denmark">Denmark</option>
      <option value="Germany">Germany</option>
      <option value="France">France</option>
    </optgroup>

नोट: केवल <optgroup> और <option> टैग वापस आ गए हैं, इसलिए आपको अभी भी आउटपुट को एक उपयुक्त <select> टैग में लपेटना होगा।

option_groups_from_collection_for_select (संग्रह, group_method, group_label_method, option_key_method, option_value_method, select_key = nil) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 461
def option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method, selected_key = nil)
  collection.map do |group|
    option_tags = options_from_collection_for_select(
      value_for_collection(group, group_method), option_key_method, option_value_method, selected_key)

    content_tag("optgroup".freeze, option_tags, label: value_for_collection(group, group_label_method))
  end.join.html_safe
end

<option> की एक स्ट्रिंग देता है <option> टैग, जैसे options_from_collection_for_select , लेकिन तर्कों के ऑब्जेक्ट संबंधों के आधार पर <optgroup> टैग द्वारा उन्हें समूह।

पैरामीटर:

  • collection - वस्तुओं की एक सरणी <optgroup> टैग का प्रतिनिधित्व करती है।

  • group_method - एक विधि का नाम, जिसे collection सदस्य पर बुलाया जाता है, <option> टैग का प्रतिनिधित्व करने वाली बाल वस्तुओं की एक सरणी देता है।

  • group_label_method - एक विधि का नाम, जिसे collection सदस्य को कॉल करने पर, उसके <optgroup> टैग के लिए label विशेषता के रूप में उपयोग की जाने वाली स्ट्रिंग लौटाती है।

  • option_key_method - एक विधि का नाम, जिसे collection सदस्य के एक बच्चे की वस्तु पर बुलाया जाता है, एक मूल्य को उसके <option> टैग के लिए value विशेषता के रूप में उपयोग किया जाता है।

  • option_value_method - एक विधि का नाम, जिसे collection सदस्य के एक बच्चे की वस्तु पर बुलाया जाता है, उसके <option> टैग की सामग्री के रूप में उपयोग किए जाने के लिए एक मान देता है।

  • selected_key - एक मूल्य के बराबर value <option> टैग के लिए, जिसमें selected विशेषता सेट होगा। option_key_method से किसी एक कॉल के रिटर्न मान के option_key_method । यदि nil , तो कोई चयन नहीं किया जाता है। यदि कोई अक्षम मान निर्दिष्ट किया जाना है, तो वह हैश भी हो सकता है।

इस विधि के साथ उपयोग के लिए उदाहरण ऑब्जेक्ट संरचना:

class Continent < ActiveRecord::Base
  has_many :countries
  # attribs: id, name
end

class Country < ActiveRecord::Base
  belongs_to :continent
  # attribs: id, name, continent_id
end

नमूना उपयोग:

option_groups_from_collection_for_select(@continents, :countries, :name, :id, :name, 3)

संभव उत्पादन:

<optgroup label="Africa">
  <option value="1">Egypt</option>
  <option value="4">Rwanda</option>
  ...
</optgroup>
<optgroup label="Asia">
  <option value="3" selected="selected">China</option>
  <option value="12">India</option>
  <option value="5">Japan</option>
  ...
</optgroup>

नोट: केवल <optgroup> और <option> टैग वापस आ गए हैं, इसलिए आपको अभी भी आउटपुट को एक उपयुक्त <select> टैग में लपेटना होगा।

options_for_select (कंटेनर, चयनित = nil) स्रोत दिखाएं
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 357
def options_for_select(container, selected = nil)
  return container if String === container

  selected, disabled = extract_selected_and_disabled(selected).map do |r|
    Array(r).map(&:to_s)
  end

  container.map do |element|
    html_attributes = option_html_attributes(element)
    text, value = option_text_and_value(element).map(&:to_s)

    html_attributes[:selected] ||= option_value_selected?(value, selected)
    html_attributes[:disabled] ||= disabled && option_value_selected?(value, disabled)
    html_attributes[:value] = value

    tag_builder.content_tag_string(:option, text, html_attributes)
  end.join("\n").html_safe
end

एक कंटेनर (हैश, एरे, एनुमरेबल, आपके प्रकार) को स्वीकार करता है और विकल्प टैग की एक स्ट्रिंग लौटाता है। एक कंटेनर को देखते हुए जहां तत्व पहले और अंतिम (जैसे दो-तत्व सरणी) का जवाब देते हैं, "लास्ट" विकल्प मानों के रूप में और "प्रथम" विकल्प पाठ के रूप में कार्य करता है। हैश इस रूप में स्वचालित रूप से बदल जाते हैं, इसलिए चाबियाँ "पहले" बन जाती हैं और मूल्य पिछले हो जाते हैं। यदि selected निर्दिष्ट किया selected है, तो मिलान "अंतिम" या तत्व को चयनित विकल्प-टैग मिलेगा। selected कई मूल्यों का एक सरणी हो सकता है, जब एक एकाधिक चयन का उपयोग किया जाता है।

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]])
# => <option value="$">Dollar</option>
# => <option value="DKK">Kroner</option>

options_for_select([ "VISA", "MasterCard" ], "MasterCard")
# => <option value="VISA">VISA</option>
# => <option selected="selected" value="MasterCard">MasterCard</option>

options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
# => <option value="$20">Basic</option>
# => <option value="$40" selected="selected">Plus</option>

options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
# => <option selected="selected" value="VISA">VISA</option>
# => <option value="MasterCard">MasterCard</option>
# => <option selected="selected" value="Discover">Discover</option>

आप वैकल्पिक रूप से सरणी के अंतिम तत्व के रूप में HTML विशेषताएँ प्रदान कर सकते हैं।

options_for_select([ "Denmark", ["USA", {class: 'bold'}], "Sweden" ], ["USA", "Sweden"])
# => <option value="Denmark">Denmark</option>
# => <option value="USA" class="bold" selected="selected">USA</option>
# => <option value="Sweden" selected="selected">Sweden</option>

options_for_select([["Dollar", "$", {class: "bold"}], ["Kroner", "DKK", {onclick: "alert('HI');"}]])
# => <option value="$" class="bold">Dollar</option>
# => <option value="DKK" onclick="alert('HI');">Kroner</option>

यदि आप अक्षम विकल्प टैग निर्दिष्ट करना चाहते हैं, तो हैश होने के लिए selected सेट करें :disabled होने के लिए या तो मान या मान को अक्षम किया जाना है। इस मामले में, आप उपयोग कर सकते हैं :selected चयनित विकल्प टैग निर्दिष्ट करने के लिए चयनित।

options_for_select(["Free", "Basic", "Advanced", "Super Platinum"], disabled: "Super Platinum")
# => <option value="Free">Free</option>
# => <option value="Basic">Basic</option>
# => <option value="Advanced">Advanced</option>
# => <option value="Super Platinum" disabled="disabled">Super Platinum</option>

options_for_select(["Free", "Basic", "Advanced", "Super Platinum"], disabled: ["Advanced", "Super Platinum"])
# => <option value="Free">Free</option>
# => <option value="Basic">Basic</option>
# => <option value="Advanced" disabled="disabled">Advanced</option>
# => <option value="Super Platinum" disabled="disabled">Super Platinum</option>

options_for_select(["Free", "Basic", "Advanced", "Super Platinum"], selected: "Free", disabled: "Super Platinum")
# => <option value="Free" selected="selected">Free</option>
# => <option value="Basic">Basic</option>
# => <option value="Advanced">Advanced</option>
# => <option value="Super Platinum" disabled="disabled">Super Platinum</option>

नोट: केवल विकल्प टैग वापस आ गए हैं, आपको इस कॉल को नियमित HTML चयन टैग में लपेटना होगा।

Options_from_collection_for_select (संग्रह, मान_method, text_method, चयनित = nil) स्रोत दिखाएँ
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 400
def options_from_collection_for_select(collection, value_method, text_method, selected = nil)
  options = collection.map do |element|
    [value_for_collection(element, text_method), value_for_collection(element, value_method), option_html_attributes(element)]
  end
  selected, disabled = extract_selected_and_disabled(selected)
  select_deselect = {
    selected: extract_values_from_collection(collection, value_method, selected),
    disabled: extract_values_from_collection(collection, value_method, disabled)
  }

  options_for_select(options, select_deselect)
end

विकल्प टैग की एक स्ट्रिंग लौटाता है जिसे collection पर पुनरावृत्ति करके और मान पाठ के रूप में text_method कॉल के परिणाम को निर्दिष्ट करके text_method को विकल्प पाठ के रूप में text_method जाता है।

options_from_collection_for_select(@people, 'id', 'name')
# => <option value="#{person.id}">#{person.name}</option>

यह अक्सर इस उदाहरण की तरह select_tag के अंदर उपयोग नहीं किया जाता है:

select_tag 'person', options_from_collection_for_select(@people, 'id', 'name')

यदि मानों के मान या सरणी के रूप में निर्दिष्ट किया selected है, तो value_method पर एक मैच लौटाने वाले तत्व (ओं) को विकल्प टैग (s) चुना जाएगा।

यदि selected को प्रोक के रूप में निर्दिष्ट किया जाता है, तो संग्रह के वे सदस्य जो अनाम फ़ंक्शन के लिए सही हैं, चयनित मान हैं।

selected भी एक हैश हो सकता है, दोनों को निर्दिष्ट कर सकता है :selected और / या :disabled आवश्यक के रूप में :disabled मान।

चयनित या अक्षम विकल्पों को निर्दिष्ट करते समय value_method के समान वर्ग निर्दिष्ट करना सुनिश्चित करें। ऐसा करने में विफलता अवांछित परिणाम उत्पन्न करेगी। उदाहरण:

options_from_collection_for_select(@people, 'id', 'name', '1')

1 की आईडी वाले व्यक्ति का चयन नहीं करेगा क्योंकि 1 (एक Integer ) '1' (एक स्ट्रिंग) के समान नहीं है

options_from_collection_for_select(@people, 'id', 'name', 1)

वांछित परिणाम उत्पन्न करना चाहिए।

चयन करें (ऑब्जेक्ट, विधि, विकल्प = शून्य, विकल्प = {}, html_options = {}, और ब्लॉक) दिखाएँ स्रोत
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 164
def select(object, method, choices = nil, options = {}, html_options = {}, &block)
  Tags::Select.new(object, method, self, choices, options, html_options, &block).render
end

प्रदान की गई वस्तु और विधि के लिए एक चयनित टैग और निहित विकल्प टैग की एक श्रृंखला बनाएं। ऑब्जेक्ट द्वारा वर्तमान में आयोजित विकल्प का चयन किया जाएगा, बशर्ते कि ऑब्जेक्ट उपलब्ध हो।

अन्य हेल्पर्स आउटपुट के लिए choices पैरामीटर के लिए दो संभावित प्रारूप हैं:

  • एक फ्लैट संग्रह ( options_for_select )।

  • एक नेस्टेड संग्रह ( grouped_options_for_select देखें)।

उदाहरण के लिए:

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, { include_blank: true })

बन जाएगा:

<select name="post[person_id]" id="post_person_id">
  <option value=""></option>
  <option value="1" selected="selected">David</option>
  <option value="2">Eileen</option>
  <option value="3">Rafael</option>
</select>

संबंधित व्यक्ति के पास आईडी 1 है।

यह मानक तरीके से विकल्पों का डिफ़ॉल्ट सेट प्रदान करने के लिए उपयोग किया जा सकता है: क्रिएट फॉर्म को रेंडर करने से पहले, एक नया मॉडल उदाहरण डिफ़ॉल्ट विकल्पों को असाइन किया गया है और @model_name के लिए बाध्य है। आमतौर पर यह मॉडल डेटाबेस में सहेजा नहीं जाता है। इसके बजाय, दूसरा मॉडल ऑब्जेक्ट तब बनाया जाता है जब निर्माण अनुरोध प्राप्त होता है। यह उपयोगकर्ता को कई रिकॉर्ड बनाने के अपेक्षित परिणामों के साथ एक से अधिक बार फॉर्म पेज प्रस्तुत करने की अनुमति देता है। इसके अलावा, यह एकल आंशिक रूप से दोनों को संपादित करने और प्रपत्र बनाने के लिए प्रपत्र इनपुट उत्पन्न करने के लिए उपयोग करने की अनुमति देता है।

डिफ़ॉल्ट रूप से, post.person_id चयनित विकल्प है। selected: value निर्दिष्ट करें selected: value किसी भिन्न चयन या selected: nil का उपयोग करने के लिए selected: value selected: nil सभी विकल्पों को अचयनित छोड़ने के लिए selected: nil । इसी तरह, आप विकल्प टैग में अक्षम होने वाले मूल्यों को निर्दिष्ट कर सकते हैं :disabled विकल्प। यह या तो एक ही मान या विकलांग होने के लिए एक मान हो सकता है।

एक ब्लॉक को select लिए पारित किया जा सकता है कि कैसे अनुकूलित करने के लिए विकल्प टैग प्रदान किए जाएंगे। यह तब उपयोगी होता है जब विकल्प टैग में जटिल विशेषताएँ होती हैं।

select(report, "campaign_ids") do
  available_campaigns.each do |c|
    content_tag(:option, c.name, value: c.id, data: { tags: c.tags.to_json })
  end
end

पकड़ लिया

HTML विनिर्देशन का कहना है कि जब multiple पैरामीटर चयन करने के लिए पारित हुए और सभी विकल्पों को रद्द कर दिया गया तो वेब ब्राउज़र सर्वर पर कोई मूल्य नहीं भेजते हैं। दुर्भाग्य से यह एक role_ids परिचय देता है: यदि किसी User मॉडल में कई roles और उसके पास role_ids , और उस रूप में, जिसमें उपयोगकर्ता की भूमिकाएँ संपादित होती हैं, तो उपयोगकर्ता भूमिका से कई भूमिकाएँ role_ids है। तो, किसी भी मास-असाइनमेंट मुहावरे की तरह

@user.update(params[:user])

भूमिकाओं को अद्यतन नहीं करेंगे।

इसे रोकने के लिए सहायक प्रत्येक एकाधिक चयन से पहले एक सहायक छिपा क्षेत्र उत्पन्न करता है। छिपे हुए फ़ील्ड का नाम एकाधिक चयन और रिक्त मान के समान है।

नोट: क्लाइंट या तो केवल छिपा हुआ फ़ील्ड (निरूपित एकाधिक चयन बॉक्स का प्रतिनिधित्व करता है), या दोनों फ़ील्ड भेजता है। इसका मतलब है कि परिणामी सरणी में हमेशा एक रिक्त स्ट्रिंग होती है।

यदि आप चाहते हैं कि सहायक इस छिपे हुए क्षेत्र को उत्पन्न न करे तो आप इसमें शामिल कर सकते हैं include_hidden: false विकल्प।

time_zone_options_for_select (चयनित = nil, प्राथमिकता_ zones = nil, मॉडल = :: ActiveSupport :: TimeZone) स्रोत दिखाएँ
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 575
def time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone)
  zone_options = "".html_safe

  zones = model.all
  convert_zones = lambda { |list| list.map { |z| [ z.to_s, z.name ] } }

  if priority_zones
    if priority_zones.is_a?(Regexp)
      priority_zones = zones.select { |z| z =~ priority_zones }
    end

    zone_options.safe_concat options_for_select(convert_zones[priority_zones], selected)
    zone_options.safe_concat content_tag("option".freeze, "-------------", value: "", disabled: true)
    zone_options.safe_concat "\n"

    zones = zones - priority_zones
  end

  zone_options.safe_concat options_for_select(convert_zones[zones], selected)
end

दुनिया में किसी भी समय क्षेत्र के लिए विकल्प टैग की एक स्ट्रिंग लौटाता है। एक ActiveSupport::TimeZone आपूर्ति ActiveSupport::TimeZone नाम चयनित विकल्प टैग के रूप में चिह्नित करने के लिए चयनित है। आप ActiveSupport::TimeZone ऑब्जेक्ट्स को priority_zones रूप में भी प्रदान कर सकते हैं, ताकि वे शेष (लंबी) सूची के ऊपर सूचीबद्ध हो जाएं। (आप अपनी पसंद के क्षेत्र का चयन करने के लिए USS समय क्षेत्रों की सूची प्राप्त करने के लिए ActiveSupport::TimeZone.us_zones उपयोग कर सकते हैं

selected पैरामीटर या तो nil होना चाहिए, या एक स्ट्रिंग जो ActiveSupport::TimeZone नाम हो।

डिफ़ॉल्ट रूप से, model ActiveSupport::TimeZone स्थिरांक है (जो एक मान ऑब्जेक्ट के रूप में सक्रिय रिकॉर्ड में प्राप्त किया जा सकता है)। केवल आवश्यकता यह है कि model पैरामीटर एक ऐसी वस्तु हो all , जो समय-क्षेत्र का प्रतिनिधित्व करने वाली वस्तुओं की एक सरणी पर प्रतिक्रिया करती है और वापस लौटाती है।

नोट: केवल विकल्प टैग वापस आ गए हैं, आपको इस कॉल को नियमित HTML चयन टैग में लपेटना होगा।

time_zone_select (ऑब्जेक्ट, विधि, प्राथमिकता_ज़ोन = शून्य, विकल्प = {}, html_options = {} स्रोत दिखाएँ
# File actionview/lib/action_view/helpers/form_options_helper.rb, line 297
def time_zone_select(object, method, priority_zones = nil, options = {}, html_options = {})
  Tags::TimeZoneSelect.new(object, method, self, priority_zones, options, html_options).render
end

दिए गए ऑब्जेक्ट और विधि के लिए चयन और विकल्प टैग देता है, विकल्प टैग की सूची उत्पन्न करने के लिए time_zone_options_for_select का उपयोग करते हुए ।

:include_blank ऊपर दर्ज़ विकल्प के अलावा , यह विधि एक :model विकल्प का भी समर्थन करती है, जो ActiveSupport::TimeZone लिए डिफ़ॉल्ट है । इसका उपयोग उपयोगकर्ताओं द्वारा किसी भिन्न समय क्षेत्र मॉडल ऑब्जेक्ट को निर्दिष्ट करने के लिए किया जा सकता है। ( time_zone_options_for_select अधिक जानकारी के लिए देखें ।)

आप ActiveSupport::TimeZone ऑब्जेक्ट की एक सरणी भी प्रदान कर सकते हैं priority_zones ताकि उन्हें बाकी (लंबी) सूची के ऊपर सूचीबद्ध किया जा सके। आप ActiveSupport::TimeZone.us_zones समय क्षेत्रों की सूची के लिए ActiveSupport::TimeZone.us_zones उपयोग कर सकते हैं , ActiveSupport::TimeZone.country_zones किसी अन्य देश के समय क्षेत्रों के लिए, या अपनी पसंद के क्षेत्र का चयन करने के लिए Regexp।

अंत में, यह विधि एक :default विकल्प का समर्थन करती है, जो एक डिफ़ॉल्ट ActiveSupport::TimeZone का चयन करता है यदि ऑब्जेक्ट का टाइम ज़ोन है nil

time_zone_select("user", "time_zone", nil, include_blank: true)

time_zone_select("user", "time_zone", nil, default: "Pacific Time (US & Canada)")

time_zone_select("user", 'time_zone', ActiveSupport::TimeZone.us_zones, default: "Pacific Time (US & Canada)")

time_zone_select("user", 'time_zone', [ ActiveSupport::TimeZone['Alaska'], ActiveSupport::TimeZone['Hawaii'] ])

time_zone_select("user", 'time_zone', /Australia/)

time_zone_select("user", "time_zone", ActiveSupport::TimeZone.all.sort, model: ActiveSupport::TimeZone)

Original text