2013-10-17 79 views
1

我有一个名为资源志愿者:如何向我的路线添加其他资源操作?

class VolunteersController < ApplicationController 

    before_filter :authenticate_user! 

    def index 
    #@volunteers = Volunteer.all() 
    @volunteers = Volunteer.paginate(:page => params[:page]) 
    end 

    def show 
    @volunteer = Volunteer.find(params[:id]) 
    end 

    def new 
    @volunteer = Volunteer.new 
    end 

    def create 
    @post = Volunteer.new(volunteer_params) 

    @post.save 
    redirect_to @post 
    end 

    def destroy 
    @volunteer = Volunteer.find(params[:id]) 
    @volunteer.destroy 
    redirect_to :action => 'index' 
    end 

    def search 
    @volunteers = Volunteer.search params[:search] 
    end 

private 

    def volunteer_params 
    params.require(:volunteer).permit(:forename, :surname) 
    end 

end 

我增加了一个额外的动作称为搜索,但我有问题,它在我的路线文件映射:

root 'home#index' 
resources :volunteers 

如何映射到搜索行动(包括参数)?

回答

4

没有在路由文件本身就是一个例子:

# Example resource route with options: 
    # resources :products do 
    #  member do 
    #  get 'short' 
    #  post 'toggle' 
    #  end 
    # 
    #  collection do 
    #  get 'sold' 
    #  end 
    # end 

您需要添加search方法作为后(或任何为宜)的资源选项,你可以将它添加到收藏或成员 - 收集方法不会在url中查找特定的项目标识,这适用于搜索方法。

resources :volunteers do 
    collection do 
    post :search 
    end 
end 
+0

有没有办法提及我希望'志愿者/ 1/search'映射到'search'动作? – Lokesh

+1

@lokesh将'get'search''添加到志愿者的'member do'块中。 – Matt

+0

谢谢!有效。 – Lokesh