rails -double negative of variable

时间:2011-09-24 20:23:18

标签: ruby-on-rails

*警告 - 新手提醒*

我正在读一本名为RailsS​​pace的书来学习Ruby on Rails框架。作者构建了用户可以编辑的用户配置文件,现在他正在根据其他用户配置文件构建面向公众的配置文件。他必须做的唯一改变是基本上隐藏面向公众的个人资料上的编辑链接。他使用这个函数来隐藏它,但我不明白它是如何工作的...... hide_edit_links是一个变量

 # Return true if hiding the edit links for spec, FAQ, etc. 

    def hide_edit_links?

    not @hide_edit_links.nil? 

    end

他也写了

  

那么,hide_edit_links的原因是什么?一般的工作是   如果未定义,则实例变量为nil,因此函数返回   除非明确设置@hide_edit_links,否则为false。

但我真的不明白。

你能解释一下新手的更多细节吗?

他稍后用这个

实现它
<div class="sidebar_box"> <h2>
<% unless hide_edit_links? %> <span class="edit_link">
<%= link_to "(edit)", :controller => "faq", :action => "edit" %> </span>
<% end %>

1 个答案:

答案 0 :(得分:2)

我认为理解代码的关键(我还没有读过这本书)是@hide_edit_links不是布尔值,它只是某种标记。如果@hide_edit_links不是nil(它与哪个对象类型无关)那么hide_edit_links?`将返回true。

我必须说代码根本不是直接,它绝对令人费解和复杂(可能没有任何理由)

示例1(新实例,未设置@hide_edit_links,因此显示链接)。

  • 该类已实例化(此代码不在原始问题中,但我认为它在那里),并且由于没有引用@hide_edit_links,因此instace变量的值为nil
  • 从页面调用hide_edit_links?时,@hide_edit_links为零,因此@hide_edit_links.nil?返回true,因此not @hide_edit_links.nil?为false。
  • 由于该页面使用unless hide_edit_links?,因此会显示该链接。

示例2(新实例,@hide_edit_links设置了一个对象,因此它不显示链接)。

  • 该类已实例化,@hide_edit_links设置为非nil的值。
  • 从页面调用hide_edit_links?时,@hide_edit_links 为零,因此@hide_edit_links.nil?返回false,因此not @hide_edit_links.nil?为真。
  • 由于该网页使用unless hide_edit_links?,因此不显示该链接。

对于琐碎的例子感到抱歉......“功能”并不复杂,但作者使用的解决方案看起来非常复杂。