القضبان: تحديد مسبق قيمة في ActionView-مساعد "collection_select"
-
06-07-2019 - |
سؤال
وأنا أحاول الحصول على ActionView-مساعد collection_select
أ > لاتخاذ القيمة التي سيتم انتقاؤه في، القائمة المنسدلة.
لا (:selected
في أتش تي أم أل خيار التجزئة)
<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>
ولا (:selected
في خيار التجزئة)
<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>
ويبدو أن العمل.
وماذا أفعل الخطأ؟ يمكن لأي شخص أن يساعدني على هذا واحد؟
المحلول
مستندات :
واستخدام نموذج (اختيار 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
يعمل بشكل جيد جدا لهذه الأشياء، دون الحاجة إلى تحديد نموذج منفصل بالنسبة لهم.