簡體   English   中英

Rails / Ruby delete_if

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM