Rails:可选的查找字段

时间:2013-01-09 12:33:48

标签: ruby-on-rails

在我的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 字段为空,则无法加载视图,因为查找失败。关于如何忽略空值并将该字段留空的任何建议?

2 个答案:

答案 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