Rails 3: sunspot solr: добавление возможности поиска для каждой страницы - PullRequest
0 голосов
/ 15 мая 2011

Как добавить поиск в макет, чтобы он мог искать посты на каждой странице сайта? такой как здесь на stackoverflow.

В учебных руководствах показано добавление метода поиска к действию index для PostsController, а затем добавление блока формы и результатов в views / post / index.html.erb.

Я пытался создать форму в application.html.erb, которая отправляет запрос get в поисковое действие контроллера posts. Кажется, я не могу понять, кто-то может объяснить, где я иду не так?

В настоящее время я получаю эту ошибку при переходе на мою домашнюю страницу:

NameError in Pages # home

неопределенная локальная переменная или метод `search_posts_path '

PostsController

   def search
     if params[:q]
       query = params[:q]
       @search = Post.search do
         keywords query
       end
       @posts = @search.results
     end
    end

пост модель

 searchable do
       text :title, :default_boost => 2
       text :content
  end

routes.rb

  match 'auth/:provider/callback' => 'authentications#create'
  resources :authentications

  devise_for :users, :controllers => {:registrations => 'registrations'}




  resources :posts do
      member do
      get :likers, :search
      end
  end  

  resources :relationships, :only => [:create, :destroy]
  resources :appreciations, :only => [:create, :destroy]

  root :to => "pages#home"

 match '/contact', :to => 'pages#contact'
 match '/about',   :to => 'pages#about'
 match '/help',    :to => 'pages#help'
 match '/blog',    :to => 'pages#blog'


  resources :users do
     member do
     get :following, :followers, :likes
     end
     resources :collections
  end

просмотров / макеты / application.html.erb

<%= form_tag search_posts_path, :method => :get do %>
<p>
<%= text_field_tag :q, params[:q] %> <%= submit_tag "Search!" %>
</p>
<% end %>

PagesController

 def home
    @title = "Home"
    if user_signed_in?
      @user = current_user
      @post = current_user.posts.build
      @feed_items = current_user.feed.paginate(:per_page => "10", :page => params[:page])
    else
     #render :layout => 'special_layout' 
    end
  end

1 Ответ

1 голос
/ 15 мая 2011

Это вопрос маршрутизации Ruby on Rails.

Маршрут member предназначен для работы с одной записью. Итак, вы определяете search_post_path(@post), который будет направлен на что-то вроде /posts/1/search

То, что вы хотите, это маршрут collection.

resources :posts do
  member do
    get :likers
  end
  collection do
    get :search
  end
end

Это создаст метод search_posts_path и маршрут к /posts/search, как вы ожидаете.

Смотри также: http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

...