ruby-on-rails - شرح - ruby معنى




روبي أون ريلز-اختيار متعدد في f.select (3)

لدي مربع الاختيار التالي في نموذجي:

Related Type: &nbsp; <%= f.select(:TYPE, [['Type A', 'Type A'],
                                  ['Type B', 'Type B'],
                                  ['Type C', 'Type C'],
                                  ['Type D', 'Type D'],
                                  ['Type E', 'Type E']
                                 ],{ :prompt => "Please select"}
                                 ) %>

أريد السماح للمستخدم بإجراء تحديدات متعددة وكذلك تحديد حجم مربع الاختيار 5.

كيف نفعل ذلك للرمز أعلاه؟


{: موجه => "الرجاء تحديد"} ، {: multiple => صواب ،: size => 5} {} مهم عند تحديد


بعد { :prompt => "Please select"} أضف علامة تجزئة أخرى مع خيارات html على سبيل المثال

<%= f.select(:TYPE, [['Type A', 'Type A'],
                                  ['Type B', 'Type B'],
                                  ['Type C', 'Type C'],
                                  ['Type D', 'Type D'],
                                  ['Type E', 'Type E']
                                 ],{ :prompt => "Please select"},
                                   { :multiple => true, :size => 5 }
                                 ) %>

بمجرد القيام بذلك ، قد ترغب في نقل خيار :prompt (احتفظ بالفرغ {} الرغم من عدم معاملة سمات html كخيارات Rails.)

ستحتاج أيضًا إلى التأكد من أن رمز وحدة التحكم لديك يقبل قيم متعددة ويتعامل معها بشكل صحيح.


لدي مثال يعمل بشكل كامل (بما في ذلك تحديد مسبق عند تحرير الكائن) ، عندما:

  • Object هو الكائن المدروس
  • similar_ids هو مفتاح العلاقات ، وهو عبارة عن string

في التشكيل:

form_for(@object) do |f|
  = f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'}

وفي نموذج Object.rb :

class Object < ActiveRecord::Base
  before_save :handle_similars

  def handle_similars
    self.similar_ids = self.similar_ids.select(&:present?).join(';') 
    # .select(&:present?) is necessary to avoid empty objects to be stored
  end

  def similars
    self.class.find(self.similar_ids.split(';'))
  end

end

هذه الوظائف ساعدتني:

آمل أن يساعد





ruby-on-rails