【问题标题】:Check to see if a field is blank in rails检查rails中的字段是否为空白
【发布时间】:2013-07-02 07:58:30
【问题描述】:

我看过这些关于堆栈溢出的帖子: A concise explanation of nil v. empty v. blank in Ruby on Rails Rails: How do I check if a column has a value?

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

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 的任何地方。

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

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      更好:

      @header.try(:links)
      

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

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

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

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

      【讨论】:

      • 虽然我同意我不会像这样链接尝试,但我认为使用 try 比显式检查 nil 更干净,并且无论哪种方式最终都会得到相同的结果。另请注意,链接的文章正在处理哈希,它比使用 try 有更好的方法,关于它的第二篇文章更多地是关于 Demeter 问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多