2012-11-30 48 views
1

關於this question的回答爲我提供了一個很好的路線圖,用於生成選擇標籤和關聯集合中的數據。使用best_in_place gem如何爲選擇標籤指定一個零值?

這很好,一切都很好。

我現在的問題是,我該如何處理一個空集合?我可以指定:nil => "Some nil message here"

但是,這似乎不適用於收集,更糟的是,當收集中沒有任何東西時,它似乎顯示一些整數(即12)。我假設這些是來自集合中先前顯示的對象的ID,但是顯而易見的原因沒有多大意義。

有關如何使用此寶石處理空集合的任何想法?

謝謝。

編輯1:

一種選擇是隻是把我原來的best_in_place幫手標籤的if內聲明爲在集合不爲零。但是,當用戶空白時如何編輯它?也許可能沒有辦法來處理這個問題,因爲它會涉及在集合中創建一個新記錄。

回答

2

我用在選擇標籤的空期權「解決方法」,它可以幫助你:

:type => :select, :collection => @my_colletion || [[I18n.t('common.none'), -1]] 

@my_colletion是零,它顯示了一個名爲「無」,且id選擇= -1(在後端處理並不是那麼糟糕)。

這部分代碼假定@my_collection是一個數組數組,如[ [key, value], [key, value], ... ]或零。

儘管如此,如果你希望你的MyModel.all收集到適合best_in_place的條件下,可以使用以下命令:

@my_collection = MyModel.all.map{ |object| [object.name, object.value] } 
# => this returns an array like [ [key, value], [key, value], ... ] 
# => returns an empty array (NOT nil) if there is no entry in the DB 

關於-1 ID: 使用-1 id作爲 '無'很容易,因爲你不需要顯式處理值爲零(測試等)。隨着-1 ID,您可以使用以下命令:

MyModel.where(id: params[:id]).first # => Returns the first object that has the params[:id] 
# if params[:id] is -1, it will return nil and not raise an error. 

我希望它幫助:)

+0

我喜歡這個解決方案。我如何處理後端的'-1'? – marcamillion

+0

另外,出於好奇,你如何創建'@ my_collection'?我嘗試使用常規的'ActiveRecord'對象,但它需要傳統的'@my_collection = MyModel.all'沒有給我的整個'[[key,value]]'格式。 – marcamillion

+0

我更新了我的答案;) – MrYoshiji

相關問題