0

在我的 Rails 应用程序中,我使用collection_select为用户提供有效选择的列表。我只存储了查找表中的id 。然后我在显示视图中调用查找的类以检索 id 的实际值。

在编辑中:

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

4

2 回答 2

1

usingfind_by_id将是一个选项,因为如果找不到 id,它不会引发错误。

不过,这会发出对数据库的调用。

所以我会检查 langunge_id 并提供默认值

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

这也可以移动到模型或助手中,这样它就不会弄乱您的视图代码。

于 2013-01-09T12:40:41.680 回答
0

这是一个常见的问题。只需使用try保留 nil 值:

 if @article.try(:language_id) != nil
      @code = Language.find(@article.language_id).language_code
    else
      //default nil
      @code = nil
  end
于 2013-01-09T12:49:20.070 回答