[英]Use instance variable in “delete_if” method in ruby on rails
[英]Rails/Ruby delete_if
我的表單中嵌套了一個選擇標簽,如果它等於English這個單詞,則需要從options_for_select數組中刪除一個項目
碼:
<%= fields_for :users_languages do |u| %>
<div class="field">
<%= u.label :Assign_Languages %><br />
<%= select_tag :language_id,
options_for_select(Language.all.collect {|lang|
[lang.english, lang.id].delete_if {lang.english == "English"}
}, @lang_list),
:multiple => true,
:prompt => 'Select Language' %>
</div>
<% end %>
問題:上面的代碼可以正常工作,但是由於某些原因,第一個選項仍顯示在mutli-select中,從而產生空白選擇選項。 無論如何,有沒有擺脫選擇選項和它的價值? 我什至正確地做到了嗎?
感謝您提前提供的所有幫助!
您可以使用收集和拒絕來完成。
Language.all.collect { |lang| [lang.english, lang.id] }.reject { |(lang, id)| lang == 'English' }
不確定如何使用收集來做到這一點。
我知道這已經一歲了,但是為了將來的Google員工們...
與其內聯SQL,不如使用命名范圍可能會更好:
scope :not_english, where("english != 'English'") # Rails 3
要么
named_scope :not_english, :conditions => "english != 'English'" # Rails 2
這將使您能夠:
options_for_select(Language.not_english.collect {|lang| [lang.english, lang.id]})
這更易於閱讀,更具表達力,並且不依賴於某些不可思議的數據庫ID。
干杯!
(PS:另外,您可能要考慮更新架構,以免db列的名稱與其值混淆。我可以建議使用language.name而不是language.english嗎?)
看來您的選擇實際上是返回一個空數組作為第一個元素。 嘗試先拉出不需要的選項:
Language.all.reject {|lang| lang.english == "English}.collect {|lang| [lang.english, lang.id]}
謝謝你們的回復! 我最終要做的是在查詢中處理它
碼:
<%= fields_for :users_languages do |u| %>
<div class="field">
<%= u.label :Assign_Languages %><br />
<%= select_tag :language_id, options_for_select(Language.find(:all, :conditions => "id != 1").collect {|lang| [lang.english, lang.id]}, @lang_list),:multiple => true, :prompt => 'Select Language' %>
</div>
<% end %>
數據庫中的第一行始終是相同的,因此在查詢中很容易進行...盡管上述建議將來會派上用場! 再次感謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.