1

我看过这些关于堆栈溢出的帖子: Ruby on Rails Rails 中 nil v.empty v.blank 的简明解释 :如何检查列是否有值?

而且我尝试了一些不同的方法来检查记录的存在,但我的代码仍然抛出错误:

undefined method `links' for nil:NilClass

我有这是application_controller:

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?

或者links当我之前没有为我正在调用的导航栏创建链接时,我包含的任何地方。

创建字段后一切正常,我只是介绍尚未为组创建导航栏链接的用例。

4

2 回答 2

3

问题是它@header是 nil (没有找到标题)。为避免错误尝试:

if @header && @header.links
  @header.links
end

在这里,您验证@header@header.links“存在”。顺便说一句,你想用你的实例变量做@header什么?因为@header.links什么都不做。

于 2013-07-01T22:39:05.723 回答
1

更好的是:

@header.try(:links)

这将在调用“链接”之前自动检查@header 是否为零。

如果你真的在乎,你可以这样做:

@header.try(:links) unless @header.try(:links).try(:empty?)

但是你应该弄清楚为什么@header 是零。

于 2013-07-01T23:32:20.373 回答