幫助我有一個簡單的輔助軌內collection_select
def get_ecr_name(name)
name.present? ? :name : :ip
end
希望在收集使用選擇
=f.collection_select(:ecr_id, current_user.ecrs, :id, get_ecr_name(@ecr.name), :prompt => 'Select ECR')
但問題如果ECR沒有指定其他選擇的選項都是空
幫助我有一個簡單的輔助軌內collection_select
def get_ecr_name(name)
name.present? ? :name : :ip
end
希望在收集使用選擇
=f.collection_select(:ecr_id, current_user.ecrs, :id, get_ecr_name(@ecr.name), :prompt => 'Select ECR')
但問題如果ECR沒有指定其他選擇的選項都是空
由於collection_select
會用@ecr.name
(其中name
存在)調用一次輔助方法,它將返回:name
,因此name
方法正在被調用。要克服這種情況的一種方法是在你的控制器創建一個數組對象的另一個變量,像這樣:
@ecrs = current_user.ecrs.map{|ecr| (ecr.name = ecr.name.present? ? ecr.name : ecr.ip); ecr } # returns a temporary modified ecrs array.
然後在視圖中使用它:
= f.collection_select(:ecr_id, @ecrs, :id, :name, :prompt => 'Select ECR')
那些空白選擇選項包含的ID,這樣
的ID你寫另一個幫手
def get_ecr_id(id,name)
return id if name.present?
end
然後重新寫
=f.collection_select(:ecr_id, current_user.ecrs, get_ecr_id(@ecr.id,@ecr.name), get_ecr_name(@ecr.name), :prompt => 'Select ECR')
檢查它,有一個options_from_collection_for_select一個選項
<%= f.select :ecr_id, options_from_collection_for_select(get_ecr_name(@ecr)).name, 'id', 'name') %>
感謝help.I重做f.select
根據您anwers
=f.select('ecr_id', current_user.ecrs.collect {|p|[get_ecr_name(p.name,p.ip),p.id] }, { prompt: 'Select Ecr' })
當您更改到'get_ecr_name會發生什麼(name,ip)'並且調用爲'get_ecr_name(@ ecr.name,@ ecr.ip)'? – Pavan
@Pavan它返回給我的IP列表,我的目標是當沒有名字在選擇菜單中顯示IP – xxx