0

サイトのすべてのページから投稿を検索できるように、レイアウトに検索を追加するにはどうすればよいですか? ここのstackoverflowのように。

チュートリアルでは、PostsController の index アクションに search メソッドを追加し、views/post/index.html.erb にフォームと結果ブロックを追加する方法を示しています。

投稿コントローラーの検索アクションに get 要求を送信するフォームを application.html.erb に作成しようとしています。私はそれを正しく理解できないようです。誰かが私が間違っている場所を説明するのを手伝ってくれますか?

現在、ホームページにアクセスすると、次のエラーが表示されます。

NameError in Pages#home

未定義のローカル変数またはメソッド「search_posts_path」

投稿コントローラー

   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

ルート.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 %>

ページコントローラー

 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
4

1 に答える 1

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

于 2011-05-15T01:32:44.493 に答える