Route namespace - Spree

Mam taki scaffold z przerobionym kontrolerem:

Controller

class Admin::ManufacturersController < Admin::BaseController resource_controller end
Model + Migracja

[code]class Manufacturer < ActiveRecord::Base
end

class CreateManufacturers < ActiveRecord::Migration
def self.up
create_table :manufacturers do |t|
t.string :name
t.text :description

  t.timestamps
end

end

def self.down
drop_table :manufacturers
end
end[/code]
Widoki index, new, show, edit, _form bez przeróbek ze scaffolda

View index.html.erb

[code]…
<% @manufacturers.each do |manufacturer| %>

<%= manufacturer.name %> <%= manufacturer.description %> <%= link_to 'Show', manufacturer %> <%= link_to 'Edit', edit_manufacturer_path(manufacturer) %> <%= link_to 'Destroy', manufacturer, :confirm => 'Are you sure?', :method => :delete %> <% end %> ...[/code] W pliku routes.rb wrzuciłem [code]namespace :admin do resources :manufacturers end[/code] Po odpaleniu .../admin/manufacturers/ dostaje [code]No route matches {:action=>"show", :controller=>"manufacturers", :id=>#<Manufacturer id: 1, name: "abc", description: "", created_at: "2011-02-25 16:12:54", updated_at: "2011-02

Extracted source (around line #16):

13:


14: <%= manufacturer.name %>
15: <%= manufacturer.description %>
16: <%= link_to ‘Show’, manufacturer %>
17: <%= link_to ‘Edit’, edit_manufacturer_path(manufacturer) %>
18: <%= link_to ‘Destroy’, manufacturer, :confirm => ‘Are you sure?’, :method => :delete %>
19: [/code]
Co powinienem wstawić do routes.rb ?

Ja bym spróbował tego:

link_to "Show", [:admin, manufacturer]

No tak, mogę też w ten sposób:

<%= link_to 'Show', admin_manufacturer_path(manufacturer) %>

ale to wtedy muszę wszystkie pliki widoków modyfikować. Nie ma możliwości w pliku routes.rb zrobić jakiegoś przekierowania ?

Obawiam się że nie, namespace’owane ścieżki i kontrolery mają swoją cenę.
Ale mogę się mylić, może da się określić jakiegoś domyślnego namespace’a dla konkretnego zasobu?

Można spróbować zamienić namespace na scope

scope "/admin" do resources :manufacturers end
i wtedy będzie manufacturer_path w widoku a /admin/manufacturer w linkach, tylko, że nie może być prefiksu Admin:: w kontrolerze… Coś za coś :slight_smile:

[quote=warszk]Można spróbować zamienić namespace na scope

scope "/admin" do resources :manufacturers end
i wtedy będzie manufacturer_path w widoku a /admin/manufacturer w linkach, tylko, że nie może być prefiksu Admin:: w kontrolerze… Coś za coś :)[/quote]
Jest jeszcze opcja :module, więc może tak:

scope :path => "/admin", :module => "admin" do resources :manufacturers end
Ale to juz trochę śmierdzi. Dopisałbym po prostu ten admin_ sed’em.