我设置了以下型号:
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
当我在 new 视图中输入频率时,如果输入了频率,则不允许指定频段。这在我的其他视图中产生了一个问题,因为band现在为零。如何在我的索引和 show 视图中禁止指定band并显示为空,然后在 edit 视图中允许在稍后的某个时间指定一个。
我已经能够通过执行以下操作让我的索引显示空白:
contact.band && contact.band.name
但我不确定这是否是最佳方法,而且我不确定如何将类似的解决方案应用于其他观点。
非常感谢rails newb!
答案 0 :(得分:8)
在我的视图中,我在视图中使用以下可能的nil对象:
<%= @contact.band.name unless @contact.band.blank? %>
如果您的对象是数组或散列,您可以使用空?而不是功能。
<%= unless @contacts.empty? %>
..some code
<% end %>
希望这有帮助!
d
答案 1 :(得分:3)
几年前,但仍然是“rails view handle nil”的Google搜索结果,所以我将添加我的建议,用于Rails 3.2.3和Ruby 1.9.3p0。
在 application_helper.rb 中,添加以下内容:
def blank_to_nbsp(value)
value.blank? ? " ".html_safe : value
end
然后要在视图中显示值,请写下这样的内容:
<%= blank_to_nbsp contact.band %>
优点:
将不间断的空间推入网页并保留格式。答案 2 :(得分:2)
<%= @contact.try(:band).try(:name) %>
如果nil
或band
不存在作为各自对象的方法,则会返回name
。
答案 3 :(得分:2)
您可以使用Object#andand:
<%= @contact.band.andand.name %>
答案 4 :(得分:0)
<%= @contact.band if @contact.band %>
也有效