Ruby on rails 3 Rails路由,一种同义路由

Ruby on rails 3 Rails路由,一种同义路由,ruby-on-rails-3,rest,routes,Ruby On Rails 3,Rest,Routes,声明 假设我们有一个库存应用程序,它是一个移动模型,它表示任何移动,如产品购买或产品销售。所以我们有默认的REST路由 movements GET /movements(.:format) {:action=>"index", :controller=>"movements"} POST /movements(.:format) {:action=>"create", :controller=&g

声明

假设我们有一个库存应用程序,它是一个
移动
模型,它表示任何移动,如产品购买或产品销售。所以我们有默认的REST路由

    movements GET    /movements(.:format)          {:action=>"index", :controller=>"movements"}
              POST   /movements(.:format)          {:action=>"create", :controller=>"movements"}
 new_movement GET    /movements/new(.:format)      {:action=>"new", :controller=>"movements"}
edit_movement GET    /movements/:id/edit(.:format) {:action=>"edit", :controller=>"movements"}
     movement GET    /movements/:id(.:format)      {:action=>"show", :controller=>"movements"}
              PUT    /movements/:id(.:format)      {:action=>"update", :controller=>"movements"}
              DELETE /movements/:id(.:format)      {:action=>"destroy", :controller=>"movements"}
对于助记建议,我们希望有一些描述性路线,如:

 new_purchase        /purchase/new(.:format)       {:controller=>"movements", :action=>"new_purchase"}
edit_purchase        /purchase/:id/edit(.:format)  {:controller=>"movements", :action=>"edit_purchase"}
如果您可以看到
购买
移动
是相同的模型,实际上是由
移动控制器
处理的,但是有不同的流程和处理方式,这是由
创建购买
而不是
创建
指定的

问题

  • 我应该如何为
    购买
    添加restful路由?注意指定HTTP方法,如
    GET
    POST
    PUT
    DELETE

  • 我应该如何为标记编写
    表单_?使用
    移动
    模型,我们可以编写:
    但是如何调用
    购买
    路径来创建
    更新
    方法

  • 我应该如何为
    购买
    指定验证规则?我已经指定了一些关于
    移动
    模型的规则,但它们不适用于提交表单时的
    购买


  • 您可以在路由文件中使用类似的内容

     match '/purchase/new(.:format)' => 'movements#new_purchase'     :via => :get
     match '/purchase/:id/edit(.:format)' => 'movements#edit_purchase' :via => :post 
    
    你也可以提到其他的,比如删除,输入:via

    有关更多信息,请查看此 如果要将“创建”更改为“创建”,请转到“运动”控制器并更改定义名称

    对于第二个问题,你可以这样做

    form_tag(:controller => "controller_name", :action => "action_name", :method => "get")
    

    我不认为您应该寻找一种方法来为一个以两种不同方式处理对象的模型RESTfully构建路由。我觉得你在找两个东西。您可以创建一个
    Purchase
    模型,该模型从父
    Movement
    模型继承其属性

    或者,您可以假设它们是相同的对象,并使用有意义的语义路径以相同的方式处理它们。也就是说,您正在寻找的可能是
    移动
    控制器操作的默认RESTful路由的路径更改。另外,典型的rails约定是使用多个路径路由,这对于索引页和标识数据库中对象表的子集对象具有语义意义,因此我使用
    purchase
    而不是
    purchase

    resources :movements, :path => "/purchases"
    
    将产生

        movements GET    /purchases(.:format)          {:action=>"index", :controller=>"movements"}
                  POST   /purchases(.:format)          {:action=>"create", :controller=>"movements"}
     new_movement GET    /purchases/new(.:format)      {:action=>"new", :controller=>"movements"}
    edit_movement GET    /purchases/:id/edit(.:format) {:action=>"edit", :controller=>"movements"}
         movement GET    /purchases/:id(.:format)      {:action=>"show", :controller=>"movements"}
                  PUT    /purchases/:id(.:format)      {:action=>"update", :controller=>"movements"}
                  DELETE /purchases/:id(.:format)      {:action=>"destroy", :controller=>"movements"}
    

    使用此模型,
    helper方法的
    form_仍然可以像平常一样使用。假设正确定义了
    @movement
    ,则将正确调用带有
    采购
    根目录的路径。

    我在帖子中添加了第二个问题。使用
    :via
    选项可用于指定HTTP方法。希望更新后的答案解决第二个问题。先用谷歌搜索你的问题。如果你在谷歌上找不到答案,你可以在这里发布:)