How do I handle nils in views?
我设置了以下型号:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Contact < ActiveRecord::Base belongs_to :band belongs_to :mode validates_presence_of :call, :mode validates_associated :mode, :band validates_presence_of :band, :if => :no_freq? validates_presence_of :freq, :if => :no_band? protected def no_freq? freq.nil? end def no_band? band.nil? end end class Band < ActiveRecord::Base has_many :logs end class Mode < ActiveRecord::Base has_many :logs end |
当我在新视图中输入频率时,如果输入了频率,则不允许指定频段。 这在我的其他视图中产生了一个问题,因为band现在为零。 如何允许不指定band并在我的索引和显示视图中显示为空,然后在编辑视图中允许在稍后的时间点指定一个。
我已经能够通过执行以下操作让我的索引显示空白:
1 | contact.band && contact.band.name |
但我不确定这是否是最佳方法,我不确定如何将类似的解决方案应用于我的其他观点。
非常感谢rails newb!
在我的视图中,我在视图中使用以下可能的nil对象:
1 | <%= @contact.band.name unless @contact.band.blank? %> |
如果你的对象是一个数组或哈希,你可以使用空?功能而不是。
1 2 3 | <%= unless @contacts.empty? %> ..some code <% end %> |
希望这可以帮助!
d
几年前,但仍然是"rails view handle nil"的谷歌搜索结果,所以我将添加我的建议,用于Rails 3.2.3和Ruby 1.9.3p0。
在application_helper.rb中,添加以下内容:
1 2 3 | def blank_to_nbsp(value) value.blank? ?" ".html_safe : value end |
然后要在视图中显示值,请写下以下内容:
1 | <%= blank_to_nbsp contact.band %> |
优点:
- "blank"捕获nil值和空字符串(详细信息)。
-
简单地省略nil对象或使用空字符串可能会导致格式化问题。
- 使用其他答案中的"if"和"unless"建议,您必须键入每个对象名称两次。通过使用帮助程序,您只需键入一次对象名称。
您可以使用Object#和为此:
1 | <%= @contact.band.andand.name %> |
1 | <%= @contact.try(:band).try(:name) %> |
如果