Ruby on rails Rails 3从根显示的路由

Ruby on rails Rails 3从根显示的路由,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,目前 Project101::Application.routes.draw do match '/:id' => 'companies#show' resources :companies do resources :customers resources :users resources :categories resources :addresses end devise_for :users resources :users

目前

Project101::Application.routes.draw do

  match '/:id' => 'companies#show'
  resources :companies do 
    resources :customers
    resources :users
    resources :categories
    resources :addresses
  end

  devise_for :users
  resources :users, :controller => "users"

  root :to => "companies#index"
end
一切都属于一家公司。尝试创建像www.example.com/:id/customers这样的路由,其中:id始终是公司id

目前,www.example.com/:id可以工作,但所有url都生成为/companys/:id/cusotmers

这样做对吗

编辑

保留:as=>:公司帮助我更容易地生成URL、链接等。当然其他人可以用更干净或更好的方法。还必须手动创建编辑,销毁,新的不同的网址,以便我可以使用他们的链接,如果用户是管理员

Project101::Application.routes.draw do

  match '/' => 'companies#index'
  match '/companies' => 'companies#index'
  match '/:company_id' => 'companies#show', :as => :show_company
  match '/companies/:id/edit' => 'companies#edit', :as => :edit_company
  match '/companies/:id/new' => 'companies#new', :as => :new_company
  match '/companies/:id/destroy' => 'companies#destroy', :as => :delete_company

  scope '/:company_id', :as => :company do 
    resources :customers
    resources :users
    resources :categories
    resources :services
    resources :addresses
  end  
  devise_for :users
  resources :users, :controller => "users"
  root :to => "companies#index"    
end
然后只使用链接、控制器和表单的基本嵌套资源

class ApplicationController < ActionController::Base
protect_from_forgery
  helper_method :current_company

  def current_company
    if params[:company_id] != nil 
      @current_company ||= Company.find(params[:company_id])
    else
      @current_company = nil
    end
    return @current_company
  end
end 
class ApplicationController
基本链接

特定客户的链接

控制器看起来像

class CustomersController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

  def new
    @company = current_company
    @customer = @company.customers.new
  end

  def create
    @customer = Customer.new(params[:customer])
    if @customer.save
      flash[:notice] = "Successfully created customer."
      redirect_to company_customer_path(current_company, @customer)
    else
      render :action => 'new'
    end
  end
end
class CustomerController“新建”
终止
终止
终止
最后我的表格看起来像

<%= form_for [@company, @customer] do |f| %>
  <%= f.error_messages %>
  ....
<% end %>

....

是,如果您始终希望路线以公司id开头,可以将其包装在如下范围内:

scope ":company_id" do
    resources :customers
    resources :users
    resources :categories
    resources :addresses
end

当以您的方式添加时,我会得到像/:id/公司/:id/客户等接近但比我所寻找的更长的路线。我现在尝试的是scope“:id“,:as=>:company do,它给了我/:id/客户。这更容易阅读,但必须为公司手动匹配每个操作。我猜这是交易。啊,我错了。我编辑了上面的代码以删除
资源:companys
部分。另外,您不能有两个:id参数,因此我将范围中的参数重命名为:company_id。这肯定可以工作。您认为我如何将这个:company_id传递给我的控制器和链接?如果我强制将url设置为/:company\u id/customers/new,那么它将重定向到/customers,而不使用:company\u id