【问题标题】:How do I add an additional resource action to my routes?如何向我的路线添加额外的资源操作?
【发布时间】:2013-10-25 21:17:10
【问题描述】:

我有一个名为志愿者的资源:

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

如何映射到搜索操作(包括参数)?

【问题讨论】:

    标签: ruby-on-rails routing routes ruby-on-rails-4


    【解决方案1】:

    路由文件本身有一个例子:

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

    您需要将search 方法添加为资源的帖子(或任何适当的)选项,您可以将其添加到集合或成员中 - 集合方法不会在 url 中查找特定的项目 ID ,这适用于搜索方法。

    resources :volunteers do 
      collection do
        post :search
      end
    end
    

    【讨论】:

    • 有没有办法提到我希望volunteers/1/search 映射到search 操作?
    • @lok​​esh 将get 'search' 添加到志愿者下的member do 块中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2011-02-03
    • 2014-12-11
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多