Rails 3 роутинг от root show - PullRequest
       0

Rails 3 роутинг от root show

0 голосов
/ 24 февраля 2011

В настоящее время

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 %>

1 Ответ

0 голосов
/ 24 февраля 2011

Да, если вы хотите, чтобы маршруты начинались с идентификатора компании, вы можете заключить их в такую ​​область:

scope ":company_id" do
    resources :customers
    resources :users
    resources :categories
    resources :addresses
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...