2013-01-09 43 views
0

在我的Rails應用程序中,我使用collection_select爲用戶提供有效選擇列表。我從查找表中只存儲了id。然後,我在顯示視圖中撥打查找的類以檢索id的實際值。Rails:可選查找字段

在編輯

= f.collection_select :language_id, Language.find(:all, :conditions => ["supported = 't'"]), :id, :language, include_blank: false, :prompt => "Language" 

中顯示:

%p 
    %b Language: 
    = Language.find(@article.language_id).language_code 

這是所有工作的罰款,除非沒有做出選擇。如果@ article.language_id字段爲空,則視圖無法加載,因爲發現失敗。有關如何忽略空值並將該字段留空的任何建議?

回答

1

使用find_by_id將是一個選項,因爲如果找不到id,它不會引發錯誤。

這會發出一個對數據庫的調用。

,所以我只想檢查languange_id並提供一個默認

= @article.language_id.nil? ? default : Language.find_by_id(@article.language_id) 

這也可以移動到模型或輔助,所以它不會弄亂你的視圖代碼。

+0

完美。正是我在找什麼。謝謝。 – ardochhigh

0

這是一個常見問題。只需使用try即可保留零值:

if @article.try(:language_id) != nil 
     @code = Language.find(@article.language_id).language_code 
    else 
     //default nil 
     @code = nil 
    end 
+0

如果找不到ID,會發現一個錯誤,所以這不會工作 – phoet

+0

正確我試圖避免錯誤消息。 – ardochhigh

+0

好的,我更新了代碼。這應該適用於您應用條件。 –