i've been following the railscast tutorial on how to create a simple search form, for some odd reason, whenever I search the URL changes and the server log shows that it searches for the post, in this case an ad, but it doesnt display it.
My Ad Controller.
class AdsController < ApplicationController
before_action :set_ad, only: [:show, :edit, :update, :destroy]
# GET /ads
# GET /ads.json
def index
@ads = Ad.search(params[:search])
@ads_small = Ad.where(:size => "small").order('created_at DESC')
@ads_medium = Ad.where(:size => "medium").order('created_at DESC')
@ads_featured = Ad.where(:size => "featured").order('created_at DESC')
end
# GET /ads/1
# GET /ads/1.json
def show
end
# GET /ads/new
def new
@ad = Ad.new
end
# GET /ads/1/edit
def edit
end
# POST /ads
# POST /ads.json
def create
@ad = Ad.new(ad_params)
@ad.user_id = current_user.id
respond_to do |format|
if @ad.save
format.html { redirect_to @ad, notice: 'Ad was successfully created.' }
format.json { render action: 'show', status: :created, location: @ad }
else
format.html { render action: 'new' }
format.json { render json: @ad.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /ads/1
# PATCH/PUT /ads/1.json
def update
respond_to do |format|
if @ad.update(ad_params)
format.html { redirect_to @ad, notice: 'Ad was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @ad.errors, status: :unprocessable_entity }
end
end
end
# DELETE /ads/1
# DELETE /ads/1.json
def destroy
@ad.destroy
respond_to do |format|
format.html { redirect_to ads_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_ad
@ad = Ad.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def ad_params
params.require(:ad).permit(:title, :url, :preview, :location, :size, :info, :search)
end
end
My Ad Model
class Ad < ActiveRecord::Base
attr_accessible :title, :url, :preview, :size, :location, :info
belongs_to :user
has_attached_file :preview, :default_url => "missing.jpg", :styles => { :medium => "125x125^", :featured => "250x250^", :showpg => "400x400^" }, :convert_options => {:medium => "-gravity center -extent 125x125", :featured => "-gravity center -extent 250x250", :showpg => "-gravity center -extent 400x400"}
validates :title, length: { maximum: 35 }
validates :url, length: { maximum: 40 }
def self.search(search)
if search
find(:all, :conditions => ['title LIKE ?', "#{search}"])
else
find(:all)
end
end
end
My Ad Index View
<%= form_tag ads_path, :method => :get do %>
<p class="search_f">
<%= text_field_tag :search, params[:search], :class => "glow_f" %>
<%= submit_tag "Search", :name => nil, :class => "submit" %>
<% end %>
<% @ads.each do |ad| %>
<% if ad.size == "featured" %>
<div class="adspace_grid_f">
<div class="pic_sec_f">
<%= image_tag ad.preview.url(:featured) %>
</div>
<div class="text_info_f">
<span class="bold"><%= link_to ad.title, ad, :class => "title" %></span></br>
<p><%= truncate(ad.info, length: 90) %></p>
<span class="bold"><%= ad.location %></span></br>
<span class="bold"><%= ad.url %></span>
</div>
<% if can? :destroy, ad %>
<%= link_to 'Delete', ad, :method => :delete, :class => "delete" %>
<% end %>
</div>
<% end %>
<% if ad.size == "medium" %>
<div class="adspace_grid">
<div class="pic_sec">
<%= image_tag ad.preview.url(:medium) %>
</div>
<div class="text_info">
<span class="bold"><%= link_to ad.title, ad, :class => "title" %></span></br>
<p><%= truncate(ad.info, length: 60) %></p>
<span class="bold"><%= ad.location %></span></br>
<span class="bold"><%= ad.url %></span>
</div>
<% if can? :destroy, ad %>
<%= link_to 'Delete', ad, :method => :delete, :class => "delete" %>
<% end %>
</div>
<% end %>
<% end %>
Any help would be greatly appreciated.
Check the
ad.size
for the ads that qualify for your search. If the size isn't "featured" or "medium" it looks like your view will ignore it since the only if-conditions are forad.size == "featured"
andad.size == "medium"
.If you want to see what is being found by the search, include this line above the
<% @ads.each do |ad| %>
line:Also,
@ads_small
,@ads_medium
, and@ads_featured
don't appear to be used anywhere. Are those for a future purpose?