القضبان: تحديد مسبق قيمة في ActionView-مساعد "collection_select"

StackOverflow https://stackoverflow.com/questions/1018836

هل كانت مفيدة؟

المحلول

مستندات :

واستخدام نموذج (اختيار Author المرتبطة لمثيل Post، @post):

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

إذا @post.author_id بالفعل 1، وهذا من شأنه العودة:

<select name="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>

ولذا تحتاج فقط للتأكد من أن @my_object.my_method بإرجاع قيمة يطابق إحدى القيم الخيار المتاحة. إذا كان هناك مباراة ثم سيتم اختيار هذا الخيار.

نصائح أخرى

ووفقا ل مستندات ، إذا @my_object.my_method لديه نفس القيمة باعتباره واحدا من الخيارات، وسيتم اختيار واحد أن افتراضيا.

وعلى العكس من ذلك، هل يمكن أن حاول استخدام options_from_collection_for_select بالتزامن مع select_tag :

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>

استخدم :selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>

ومعرفة ما اذا كان @ my_object.my_method يعود لا شيء. إذا كان كذلك،

<اقتباس فقرة>   

إذا أسلوب الدعوة بإرجاع شيء، ليس هناك أي التحديد دون بما في ذلك: موجه أو: include_blank في تجزئة الخيارات.

وبخلاف ذلك، يمكنك محاولة استخدام امدا، كما في المثال rdoc

{:disabled => lambda {|category| category.archived? }

في قضيتك هذا سيبدو

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}

وكان يعمل أيضا إذا جمع الخاصة بك في شكل مجموعة من صفائف 2-القيمة:

CURRENCIES = [["USD", "$"], ["BRL", "R$"]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

وو:first وخدعة :last يعمل بشكل جيد جدا لهذه الأشياء، دون الحاجة إلى تحديد نموذج منفصل بالنسبة لهم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top