的關係是:當關係爲空不顯示對象
class apartment
belongs_to :house
end
class house
has_many :apartments
end
在我的公寓控制器的索引方法,我發現所有的房子與houses.all
。 在視圖有房子用正確的(的has_many)塊的公寓
問題:
有沒有租房,我不想顯示我的公寓網頁上這些房子。我怎麼能意識到這一點?
的關係是:當關係爲空不顯示對象
class apartment
belongs_to :house
end
class house
has_many :apartments
end
在我的公寓控制器的索引方法,我發現所有的房子與houses.all
。 在視圖有房子用正確的(的has_many)塊的公寓
問題:
有沒有租房,我不想顯示我的公寓網頁上這些房子。我怎麼能意識到這一點?
您可以通過幾種方式做到這一點,當你列舉如下:
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
看起來很符合邏輯,但我得到這個消息>語法錯誤,意外「}」,期待keyword_then或「;」或'\ n' – Remco 2012-02-23 15:14:37
我更新了我的代碼。 – Sebastien 2012-02-23 15:24:41
塞巴斯蒂安..感謝您的快速回復。但是,現在,我得到在AppartmentsController#索引中的差錯消息引發ArgumentError 錯誤的參數數目(0 1) 應用/模型/ house.rb:6:在'塊
最好的辦法是使用命名範圍,你的房子的模型,這樣的事情:
scope :filled, :joins => :apartments
並在控制器動作,您必須調用House.filled
這裏是選擇方法解決:
House.select {|house| house.apartments.any?}
看起來很符合邏輯,但我得到這個消息>語法錯誤,意外「}」,keyword_then或預期「;」或「\ n」 – Remco 2012-02-23 15:13:21
可以使用'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變量。
希望這會有所幫助。
是的,你必須接受的答案,當我們解決您的問題... – Sebastien 2012-02-23 14:51:10