利用ransack实现站内搜索

step 1 add_column

首先rails g migration add_category_to_job
在新增的db/migrate/2017xxxx_create_category_to_job.rb文件中添加

def change
  add_column :jobs, :category_name, :string, default: "工程师"
end```

然后`rake db:migrate`

###step 2  GEM
在Gemfile中添加 

gem 'ransack'
gem 'paginate'
gem 'paginate-bootstrap


 然后 `bundle install`;
  
###step 3  搜索框
  在Navbar增加一个搜索框

<%= form_tag search_jobs_path, :method => :get, class: "navbar-form navbar-right" do %>







<% end %>

    
###step 4  控制器
  在jobs_controller中增加相应的函数

def search
if @query_string.present?
search_result = Job.ransack(@search_criteria).result(distinct: true)
@jobs = search_result.paginate(:page => params[:page], per_page: 10 )
puts @jobs
else
@jobs = Job.publish.recent.paginate(page: params[:page], per_page: 10)
puts @jobs
end
end

  
  在`private`下面添加

def validate_search_key
@query_string = params[:q].gsub(/\|'|/|?/, "") if params[:q].present?
@search_criteria = search_criteria(@query_string)
end

def search_criteria(query_string)
{ :title_or_description_or_contact_email_or_location_or_company_or_category_cont => query_string }
end


#注意: 这里搜索是会报错,是因为没有对应的view显示搜索结果(图中标注文字可以忽略)![](http://upload-images.jianshu.io/upload_images/2471238-3797d9e47da1d683.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###step 5 VIEW 
  生成搜索结果所需要的对应页面 `touch app/views/jobs/search_result.html.erb`
  

<% if @jobs.length > 0 %>













<% @jobs.each do |job| %>








<% end %>

职位名称 工作类型 薪金 公司名称 公司地点 发布时间
<%= link_to(job.title, job_path(job)) %> <%= job.category %> <%= job.wage_lower_bound %>K - <%= job.wage_upper_bound %>K <%= link_to(job.company, '/jobs/search?utf8=✓&q=' + job.company) %> <%= job.location %> <%= job.created_at %>

<% else %>

没有相关职位,尝试搜索其他的关键字



<% end %>```

重新搜索试试看?

你可能感兴趣的:(利用ransack实现站内搜索)