2012-09-29 17 views
1

好的,這裏是我有視圖商店,顯示所有的建築物。所有我想要做的就是給我只能用狀態大廈「非賣品」的觀點店在軌道上的紅寶石的具體觀點

我有:

<% if notice%> 
<p id="notice"> <%= notice%></p> 
<%end%> 

<h1>All Priorities</h1> 

<%= form_tag store_path, :method => 'get' do %> 
<p> 
    <%=text_field_tag :search , params[:search]%> 
    <%= submit_tag "Search", :name=> nil%> 
    </p> 
    <%end%> 

<% if @buildings.present? %> 
<% @buildings.each do |building| %> 
<div class="entry"> 
    <div class="img"> 
    <%= image_tag (building.photo.url)%></div> 
    <div class=" disc"> 
    <h3>Name of the Bulding: <%= building.title %></h3> 
    <h4>Status: <%= building.status %></h4> 
    Info: <%=sanitize(building.description)%> 
    <div class="price_line"> 
     <span class="price">Price: <%= sprintf("€ %0.02f",building.price)%></span><br/> 
     <div class="button"> 
     <%= button_to("I want to see it", {:controller => "seeits", :action => "new", :building_id => building.id})%></div> 

    </div> 

    <div class="pages"> 
    <%= will_paginate @buildings %></p> 
    </div> 

    </div> 
<% end %> 

</div> 

<% else %> does not much try another name<% end %> 
在控制器

> buildings_controller

def index 

    @buildings = Building.all 

     respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @buildings } 
    end 

    end 


    # GET /buildings/1 
    # GET /buildings/1.json 
    def show 
    @building = Building.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @building } 
    end 
    end 

是那裏用IF語句來做呢?或者我必須更換<% @buildings.each do |building| %>

回答

3

來過濾大廈名單將在視圖中過濾它最簡單的方法:

@buildings.select{|b| b.status == "for sale"}.each do |building| 

然而,這仍然需要你查詢數據庫對所有的商品 - 這是低效的。你的觀點應該儘可能簡單,這不是Rails做事情的方式。

更健壯的方法是在你的控制器使用where條款:

@buildings = Building.where("status = 'for sale'") 

然而,這仍然使太多的邏輯控制器。你的模型應該能夠爲你處理所有的查詢邏輯。最好的辦法是在你的Building模型創建Rails scope

class Building < ActiveRecord::Base 
    ... 
    scope :for_sale, where(:status => "for sale") 
    ... 
end 

然後,在你的控制器(或意見),你將只需要做到:

@buildings = Building.for_sale 
+0

不工作。可以用IF語句改變或更改<%@ buildings.each do | building | %>?因爲我會提出另一種看法,出租,出售等..... – marios

+0

我有意見使用:@ buildings.collect({| b | b.status ==「待售」})。但我得到錯誤:C:/Sites/projectproperties/app/views/store/index.html.erb:15:語法錯誤,意外的'|',期待'}'@ buildings.collect({| b | b.status ==「for sale」})....^C:/Sites/projectproperties/app/views/store/index.html.erb:15:語法錯誤,意外的'}',期待keyword_end ...({| b | b.status ==「出售」})。每個do | building | – marios

+0

'@ buildings.collect {| b | b.status ==「待售」}。每個都做|建築|' - 哎呀,不好的包圍。 –