2010-04-08 93 views
4

我已經設置了以下型號:如果輸入頻率被指定如何處理視圖中的nils?

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 

當我在我的視圖中輸入的頻率它允許沒有帶。這在我的其他觀點中產生了一個問題,因爲樂隊現在是零。我如何允許指定樂隊不被指定,只是在我的索引顯示視圖中顯示爲空,然後在編輯視圖允許在稍後的時間點指定一個視圖。

我已經能夠讓我指數做顯示空白:

contact.band && contact.band.name 

但我不知道這是一個最好的方法,我不確定如何申請類似的解決方案,我的其他意見。

非常感謝鐵軌新手!

<%= @contact.band.name unless @contact.band.blank? %> 

如果你的對象是一個數組或哈希,您可以使用空:

回答

8

在我的意見,我用的是潛在的零在我的意見的對象以下?功能。

<%= unless @contacts.empty? %> 
..some code 
<% end %> 

希望這會有所幫助!

d

+0

除非與.blank一起使用?方法正是我所需要的。謝謝您的幫助! – Badweather 2010-04-08 15:50:22

+3

如果@ contact.band.present,您也可以執行'<%= @ contact.band.name? %>' – 2010-04-08 15:56:05

+0

歡迎您來到badweather!歡迎來到堆棧溢出順便說一句,不要忘記接受答案。 (無恥的名聲gr));)約翰是對的,你可以用「存在」的方法來使用if方法嗎?乾杯! – 2010-04-08 16:22:41

2
<%= @contact.try(:band).try(:name) %> 

這將返回nil如果bandname不存在作爲各自的對象的方法。

1

您可以使用Object#andand此:

<%= @contact.band.andand.name %> 
1

一對夫婦歲,但仍然是一個頂級谷歌結果爲「軌道視圖句柄無」所以我要添加使用建議使用Rails 3.2.3和Ruby 1.9.3p0。

application_helper.rb,補充一點:

def blank_to_nbsp(value) 
    value.blank? ? "&nbsp;".html_safe : value 
end 

然後在視圖中顯示的值,寫這樣的事:

<%= blank_to_nbsp contact.band %> 

優點:

  • 「空白」捕獲零值和空字符串(details)。
  • 簡單地忽略零對象或使用空字符串可能會導致格式問題。 &nbsp;將不間斷的空間推入網頁並保留格式。
  • 對於其他答案中的「如果」和「除非」建議,必須輸入每個對象名稱兩次。通過使用助手,您只需鍵入每個對象名稱一次。