【问题标题】:Rails 3: sunspot solr : adding search ability for every pageRails 3:sunspot solr:为每个页面添加搜索功能
【发布时间】:2011-05-15 00:46:47
【问题描述】:

如何将搜索添加到布局中,以便它可以通过网站的每个页面搜索帖子?比如在stackoverflow上。

教程展示了将搜索方法添加到 PostsController 的 index 操作,然后在 views/post/index.html.erb 中添加表单和结果块。

我一直在尝试在 application.html.erb 中创建一个表单,该表单将获取请求发送到帖子控制器的搜索操作。我似乎无法正确理解,有人可以帮助解释我哪里出错了吗?

目前我在访问我的主页时收到此错误:

页面中的名称错误#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

views/layouts/application.html.erb

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

页面控制器

 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 search solr sunspot


    【解决方案1】:

    这是一个 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

    【讨论】:

    • 我正在尝试确切的步骤,但收到此错误“找不到 id=search 的帖子”。任何帮助,将不胜感激。谢谢
    • Arko,collection 没有正确注册,Rails 默认对:posts 资源执行show 操作。继续努力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2014-08-20
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多