2015-03-27 3 views
0

Я использую Sunspot и Solr для полнотекстового поиска в моем приложении rails. Я пытаюсь выяснить, как показать форму (или ссылку), когда результаты поиска не возвращаются. В настоящее время он просто покажет мою пустую страницу индекса, когда ничего не будет найдено. Могу ли я сделать это с помощью инструкции if/else?Показать форму, если не найдено ни одного результата Sunspot Solr Rails 3

Вот моя модель (dairy.rb)

class Dairy < ActiveRecord::Base 
attr_accessible :title 

    searchable do 
    text :title  
end 
end 

и контроллер (dairies_controller.rb)

class DairiesController < ApplicationController 
before_filter :set_dairy, only: [:show, :edit, :update, :destroy] 

respond_to :html 

def index 
    @search = Sunspot.search [Dairy, Drink] do 
    fulltext params[:search] 
end 
    @results = @search.results 
end 

def show 
respond_with(@dairy) 
end 

def new 
@dairy = Dairy.new 
respond_with(@dairy) 
end 

def edit 
end 

def create 
@dairy = Dairy.new(params[:dairy]) 
@dairy.save 
respond_with(@dairy) 
end 

def update 
@dairy.update_attributes(params[:dairy]) 
respond_with(@dairy) 
end 

def destroy 
@dairy.destroy 
respond_with(@dairy) 
end 

private 
def set_dairy 
@dairy = Dairy.find(params[:id]) 
end 
end 

и индекс (index.html.erb)

<body class="DI"> 
<%= form_tag dairies_path, :method => :get do %> 
    <p> 
    <%= text_field_tag :search, params[:search], style:"width:550px;  height:30px;", :autofocus => true %><br> 
    <%= submit_tag "Search!", :name => nil, class: "btn btn-primary btn-lg", style: "margin-top:10px" %> 
    </p> 
<% end %> 

<%= link_to 'Add New Item', new_dairy_path, class: "btn btn-default" %> 
<p id="notice"><%= notice %></p> 

<table> 
<thead> 
    <tr> 
    <th>Title</th> 
    <th colspan="3"></th> 
    </tr> 
</thead> 

<tbody> 
    <% @results.each do |dairy| %> 
    <tr> 
     <td><%= dairy.title %></td> 
     <td><%= link_to 'Show', dairy %></td> 
     <td><%= link_to 'Edit', edit_dairy_path(dairy) %></td> 
     <td><%= link_to 'Destroy', dairy, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 
</body> 

Дайте мне знать, если вам нужны другие страницы. Наверное, очень простой способ сделать то, что я хочу, но я все еще учусь. Моя реальная цель - иметь контактную форму, если результаты поиска не найдены. Спасибо!!

ответ

0
def index 
    @search = Sunspot.search [Dairy, Drink] do 
    fulltext params[:search] 
    end 
    if @search.results.any? 
    @results = @search.results 
    else 
    return redirect_to some_path 
    end 
end 

или в представлении

if @results.any? 
    render partial: 'list_results' 
else 
    render partial: 'empty_results' 
end 
+1

вы босс, спасибо – Kathan