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