在我的Rails应用中,我使用 collection_select 为用户提供有效选项列表。我只从查找表中存储了 id 。然后我在 show 视图中调用查找的类来检索id的实际值。
编辑:
= f.collection_select :language_id, Language.find(:all, :conditions => ["supported = 't'"]), :id, :language, include_blank: false, :prompt => "Language"
在show:
%p
%b Language:
= Language.find(@article.language_id).language_code
除非没有做出选择,否则一切正常。如果 @ article.language_id 字段为空,则无法加载视图,因为查找失败。关于如何忽略空值并将该字段留空的任何建议?
答案 0 :(得分:1)
使用find_by_id
是一个选项,因为如果无法找到id,它不会引发错误。
这会发出对数据库的调用。
所以我只检查languange_id并提供默认
= @article.language_id.nil? ? default : Language.find_by_id(@article.language_id)
这也可以移动到模型或帮助器中,这样它就不会使您的视图代码混乱。
答案 1 :(得分:0)
这是一个常见问题。只需使用try
保留nil值:
if @article.try(:language_id) != nil
@code = Language.find(@article.language_id).language_code
else
//default nil
@code = nil
end