В настоящее время
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 - это всегда идентификатор компании.
На данный момент www.example.com/:id работает, но все URL генерируются как /companies/:id/cusotmers.
.
Saw Rails 3: ресурсы маршрутизации с пространством имен переменных .
Это правильный способ сделать это?
EDIT
Kept: as =>: компания, которая помогает генерировать URL, ссылки и т. Д., Немного проще для меня. Конечно, другие могут сделать чище или лучше. Также пришлось вручную создавать правки, уничтожения, новые с разными 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
Тогда просто использовали базовые nested_resources для ссылок, контроллеров и форм.
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
Основные ссылки
<%= link_to "Customers", company_customers_path(current_company) %>
ссылки для конкретного клиента
<%= link_to @customer.name, edit_company_customer_path(current_company, @customer) %>
Контроллеры выглядят как
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
И, наконец, мои формы выглядят как
<%= form_for [@company, @customer] do |f| %>
<%= f.error_messages %>
....
<% end %>