Ruby on rails 如何使用多个入口点进行RESTfull路由?

Ruby on rails 如何使用多个入口点进行RESTfull路由?,ruby-on-rails,ruby-on-rails-3,rest,routes,Ruby On Rails,Ruby On Rails 3,Rest,Routes,我有一个名为Project的模型,它是一个公司存储的信息集合。这家公司可以通过两种方式创建项目 第一种是标准的RESTful方式——公司进入项目索引,然后单击“新建项目”,创建后返回到索引,并显示一条flash消息 第二种方法是“快速创建”,当公司查看客户资料时,可以访问该方法。从这里,公司可以输入一些基本信息并发送给该客户创建一个项目(客户在这里自动指定) 这两个场景中的第二个场景有一个项目正在从clients/show访问。将这些数据发送到projects/create通常会将公司发送到pr

我有一个名为Project的模型,它是一个公司存储的信息集合。这家公司可以通过两种方式创建项目

第一种是标准的RESTful方式——公司进入项目索引,然后单击“新建项目”,创建后返回到索引,并显示一条flash消息

第二种方法是“快速创建”,当公司查看客户资料时,可以访问该方法。从这里,公司可以输入一些基本信息并发送给该客户创建一个项目(客户在这里自动指定)

这两个场景中的第二个场景有一个项目正在从clients/show访问。将这些数据发送到projects/create通常会将公司发送到projects/index,但我不希望这样。在这种情况下,create操作的不同之处在于某些字段的处理方式不同,重定向也不同。你建议我做什么

  • 在项目中构建替代的“从客户创建客户”操作
  • 在客户端中构建“创建项目”操作
  • 将参数发送到projects/create和set client_id,并重定向到client/show(如果该参数存在)
  • 还有一些我不知道的事情

  • 谢谢

    我通常使用当前URL添加隐藏的
    referer
    字段,然后重定向到该字段

    比如说

    def create
      @project = Project.new params[:project]
      @project.save
      respond_with @project, :location => params[:referer] || [:index, :projects]
    end
    

    您可以直接从
    请求
    对象和基于此的fork中利用referer,类似于
    重定向到:返回
    的工作方式

    从Rails API文档的
    重定向到
    选项散列:

    :back-返回发出请求的页面。 适用于从多个位置触发的表单。 重定向到的缩写(request.env[“HTTP\u REFERER”])

    因此,您可以简单地执行以下操作:

    def create
      @project = Project.new( params[:project] )
      @project.save
      respond_with @project, location: get_location!
    end
    
    private
    
    def get_location!
      case request.env["HTTP_REFERER"]
      # Your routing logic here.
    end
    
    如果您对此感兴趣,这也很好,而且易于进行单元测试。:)


    我只想给控制器添加另一个动作,“quick_create”或其他什么。您可以使用partials和参数将表单干燥到partials,以告诉如何渲染内容……这似乎是最简单的方法


    我遇到了这种半理性(或是半理性)的障碍,无法利用推荐人…

    我很想知道原因是什么-为什么不能利用推荐人?假装出来很简单,有些浏览器处理方式也不一样。例如,IE在某些情况下不提供有效的推荐人。这些问题很可能在这个时候就解决了,但经过多年的回避,我很难改变我的习惯。。。
    context "if the user came from the regular form" do
      before { controller.request.env["HTTP_REFERER"] = "regular_form_url" }
    
      it "redirects to the index path" do
        post :create
        response.should redirect_to :index
      end
    end
    
    context "if the user came from the quick-create form" do
      before { controller.request.env["HTTP_REFERER"] = "quick_create_url" }
    
      it "redirects to some other path" do
        post :create
        response.should redirect_to some_other_path
      end
    end