2012-02-23 95 views
0

的關係是:當關係爲空不顯示對象

class apartment 
    belongs_to :house 
end 

class house 
    has_many :apartments 
end 

在我的公寓控制器的索引方法,我發現所有的房子與houses.all。 在視圖有房子用正確的(的has_many)塊的公寓

問題:

有沒有租房,我不想顯示我的公寓網頁上這些房子。我怎麼能意識到這一點?

+0

是的,你必須接受的答案,當我們解決您的問題... – Sebastien 2012-02-23 14:51:10

回答

2

您可以通過幾種方式做到這一點,當你列舉如下:

for house in houses 
    if house.appartments.count > 0 
    puts house.title 
    end 
end 

或者當你使用範圍得到您的DATAS:

scope :with_appartments, lambda { joins(:appartments).group('appartments.id').uniq { |h| h[:id] } } 
myHousesWithAppartments = House.with_appartemnts 

或者你也可以使用一個計數器緩存:http://railscasts.com/episodes/23-counter-cache-column

+0

看起來很符合邏輯,但我得到這個消息>語法錯誤,意外「}」,期待keyword_then或「;」或'\ n' – Remco 2012-02-23 15:14:37

+0

我更新了我的代碼。 – Sebastien 2012-02-23 15:24:41

+0

塞巴斯蒂安..感謝您的快速回復。但是,現在,我得到在AppartmentsController#索引中的差錯消息引發ArgumentError 錯誤的參數數目(0 1) 應用/模型/ house.rb:6:在'塊' 應用程序/控制器/ appartments_controller.rb :34:在索引 – Remco 2012-02-23 15:44:52

2

最好的辦法是使用命名範圍,你的房子的模型,這樣的事情:

scope :filled, :joins => :apartments 

並在控制器動作,您必須調用House.filled

這裏是選擇方法解決:

House.select {|house| house.apartments.any?} 
+0

看起來很符合邏輯,但我得到這個消息>語法錯誤,意外「}」,keyword_then或預期「;」或「\ n」 – Remco 2012-02-23 15:13:21

0

可以使用'empty?'方法:

<% if !(@house.apartments.empty?) %> 
    <% @house.apartments.each do |aprtmt| 
    <%= aprtmt.info %> 
    <% end %> 
<% end %> 

這就是看它的最簡單的方法。正確的Rails說你應該把你的邏輯放在控制器中,而不是視圖中。因此,一個更合適的實施將在你的房子#顯示控制器動作:

@houses = House.all 
@houses_with_apartments = [] 
@houses.each do |house| 
    @houses_with_apartments << house unless house.empty? 
end 

然後在您的視圖您使用@houses_with_apartments變量。

希望這會有所幫助。