ok here is the thing i have the view store that shows all the buildings. all i want to do is to show me only the buildings with the status “for sale”
in views store i have:
<% 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 %>
in controller>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
is there to do it with IF statement ? or i have to change <% @buildings.each do |building| %> ?
The simplest way to filter your list of buildings would be to filter it in your view:
However, this still requires you to query the DB for all your items – which is inefficient. Your views should be as simple as possible, and this isn’t the DRY Rails way to do things.
A more robust way would be to use a
whereclause in your controller:However, this still puts too much logic in your controller. Your model should be able to handle all of the query logic for you. The best way would be to create a Rails scope on your
Buildingmodel:Then, in your controllers (or views) you would only have to do: