2013-03-02 146 views
0

我有一个名为Listing的模型,我用它来表示转租的列表。我创建了一个名为Filter的模型,用于基于用户填写的表单过滤转租。填写完表单后,我希望用户被重定向到一个模板,该模板包含从过滤器返回的所有列表。Ruby on Rails渲染部分

这是我的过滤器模型。

class Filter < ActiveRecord::Base 
attr_accessible :air_conditioning, :available_rooms, :bathrooms, :furnished, :negotiable, :new, :parking, :maximum_price, :private_bathroom, :show, :term, :total_rooms, :utilities, :washer_dryer 
serialize :term 

def listings 
    @listings ||=find_listings 
end 

private 

def find_listings 
    listings=Listing.order(:price) 
    listings=Listing.where("listings.price <= ?", maximum_price) if maximum_price.present? 
    listings=Listing.where(total_rooms: total_rooms) if total_rooms.present? 
    listings=Listing.where(available_rooms: available_rooms) if available_rooms.present? 
    listings=Listing.where(bathrooms: bathrooms) if bathrooms.present? 
    listings=Listing.where(term: term) 
    listings=Listing.where(furnished: furnished) 
    listings=Listing.where(negotiable: negotiable) 
    listings=Listing.where(utilities: utilities) 
    listings=Listing.where(air_conditioning: air_conditioning) 
    listings=Listing.where(parking: parking) 
    listings=Listing.where(washer_dryer: washer_dryer) 
    listings=Listing.where(private_bathroom: private_bathroom) 
    listings 
    end 

end 

以下是过滤器的显示方法。

<p id="notice"><%= notice %></p> 
<%= render (@filter.listings) %> 

很简单。

这里是叫_listing.html.erb

<div style="padding:5px"> 
<%= link_to 'New Listing', new_listing_path,{:style=>'', :class => "btn"} %> 
<h1>Available Sublets</h1> 

<table id="listingTable" class="table table-bordered table-hover"> 
    <tr> 
    <th><%= link_to 'Filter', new_filter_path,{:style=>'', :class => "btn"} %><%= link_to 'Clear Filter', listings_path, {:style=>'', :class => "btn"} %></th> 
    <th>Address</th> 
    <th><u><%= "Price Per Month" %></u></th> 
    <th>Description</th> 
    </tr> 
<% if @listings !=nil %> 
    <% @listings.each do |listing| %> 
     <tr onmouseover="this.style.cursor='pointer';" 
     onclick="window.location.href = '<%= url_for(:controller => 'listings', :action => 'show', :id=>listing.id) %>' " > 
     <td><%= image_tag listing.photo.url(:small) %></td> 
     <td><%= listing.address %></td> 
     <td>$<%= listing.price %></td> 
     <td width="40%"><%= listing.description %></td> 
     </tr> 
    <% end %> 
<% end %> 
<% else if @listings==nil %> 
    <p> Sorry, No Sublets Fit Your Criteria! </p> 
<% end %> 
</table> 

然而,过滤器不会返回任何结果的模板......我已经与绝对应该ATLEAST返回查询测试ATLEAST 20倍1上市。我觉得我有一个命名约定的问题,但我从来没有使用过偏分。任何帮助都会很棒。

回答

2

此代码:

listings=Listing.where(term: term) 
listings=Listing.where(furnished: furnished) 
listings=Listing.where(negotiable: negotiable) 
listings=Listing.where(utilities: utilities) 
listings=Listing.where(air_conditioning: air_conditioning) 
listings=Listing.where(parking: parking) 
listings=Listing.where(washer_dryer: washer_dryer) 
listings=Listing.where(private_bathroom: private_bathroom) 

实际上不是过滤listings进一步下降。基本上,它一遍又一遍地重新分配listings

如果你想连续的过滤器适用于listings,这样做:

listings = Listing.where(term: term) 
listings = listings.where(furnished: furnished) 
listings = listings.where(negotiable: negotiable) 
... 
+0

谢谢你,这是真的。但是,即使有这种修复,也没有任何问题出现。 – 2013-03-02 22:36:42

+0

应该叫做_listing.html.erb还是_listings.html.erb – 2013-03-02 22:38:55