Ruby on rails 检查rails中的字段是否为空
我看过关于堆栈溢出的以下帖子: 我尝试了一些不同的方法来检查记录的存在,但我的代码仍然抛出一个错误:Ruby on rails 检查rails中的字段是否为空,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我看过关于堆栈溢出的以下帖子: 我尝试了一些不同的方法来检查记录的存在,但我的代码仍然抛出一个错误: undefined method `links' for nil:NilClass 我有一个应用程序控制器: def header_links_when_signedin if signed_in? @header = @current_group.navbars.where(:header => true, :signedin => true).first
undefined method `links' for nil:NilClass
我有一个应用程序控制器:
def header_links_when_signedin
if signed_in?
@header = @current_group.navbars.where(:header => true, :signedin => true).first
unless @header.links.first.blank?
@header.links
end
end
end
我在这一行得到了错误:
unless @header.links.first.blank?
或者当我以前没有为正在调用的导航栏创建链接时,我包含链接的任何地方
当我创建了字段后,一切都很好,我只是介绍了尚未为组创建导航栏链接的用例。问题是@header
为零(未找到任何标题)。要避免此错误,请尝试:
if @header && @header.links
@header.links
end
在此验证@header
和@header.links
是否存在。顺便问一下,您想对实例变量@header
执行什么操作?因为@header.links
没有任何作用。问题是@header
为零(未找到任何头)。要避免此错误,请尝试:
if @header && @header.links
@header.links
end
在此验证@header
和@header.links
是否存在。顺便问一下,您想对实例变量@header
执行什么操作?因为@header.links
没有任何作用。更好的是:
@header.try(:links)
这将在调用@header上的“links”之前自动检查@header是否为nil
如果你真的在乎,你可以:
@header.try(:links) unless @header.try(:links).try(:empty?)
但是你应该弄清楚为什么@header是零。更好的是:
@header.try(:links)
这将在调用@header上的“links”之前自动检查@header是否为nil
如果你真的在乎,你可以:
@header.try(:links) unless @header.try(:links).try(:empty?)
但是你应该弄清楚为什么@header是nil。虽然我同意我不会像那样链接尝试,但我认为使用try比显式检查nil要干净得多,而且无论哪种方式,最终都会得到相同的结果。还要注意的是,链接文章处理的是散列,这比使用try有更好的方法,第二篇文章更多的是关于Demeter的问题。虽然我同意我不会像那样连锁尝试,但我认为使用try比显式检查nil要干净得多,而且无论哪种方法,最终都会得到相同的结果。还要注意的是,链接的文章是处理哈希的,这比使用try有更好的方法,第二篇文章更多的是关于Demeter的问题。