路由别名,有可能吗?

Ben*_*zco 5 ruby ruby-on-rails

我有一个车型:

路线:

map.resources :vehicles, :has_many => :suppliers
Run Code Online (Sandbox Code Playgroud)

一切都很好,但Vehicle有一个布尔属性is_truck.我想做一个Alias所以我可以获得相同的资源只过滤卡车,我试过:

路线:

map.trucks '/trucks', :controller => :vehicles, :action => :index, :is_truck => true
map.trucks '/trucks/by_supplier/:supplier', :controller => :vehicles, :action => :index, :is_truck => true
Run Code Online (Sandbox Code Playgroud)

第一个效果很好,但是当我在表单中搜索时,第二个不起作用并搜索所有供应商.

控制器:

class VehiclesController
   def index
     if params[:supplier]
       @vehicles = Vehicle.all :conditions => { :is_truck => params[:is_truck] }
     else
       @vehicles = Vehicle.all
     end
   end
   ...
end
Run Code Online (Sandbox Code Playgroud)

搜索表格:

<% form_for :truck, :url => {:controller => :trucks, :action => :index}, :html => {:method => :get} do |f| %>
  <% f.text_field :search %>
  <% f.submit 'Search Trucks' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

是否可以将map.resources作为别名?

Ben*_*zco 1

我找到了一种更简洁的方法来做到这一点,但搜索在特定供应商下仍然无法正常工作:

# Show all vehicles
map.connect '/vehicles/supplier/:supplier', :controller => :vehicles, :action => :index
map.resources :vehicles

# Only show trucks
map.connect '/trucks/supplier/:supplier', :controller => :vehicles, :action => :index, :is_truck => true
map.resources :vehicles, :as => 'trucks', :requirements => { :is_truck => true }
Run Code Online (Sandbox Code Playgroud)

资源: http: //api.rubyonrails.org/classes/ActionController/Resources.html