Domanda

Ho uno spazio dei nomi admin che mi dà le solite rotte come admin_projects e admin_project, tuttavia non si stanno comportando nel solito modo. Questo è il mio primo progetto Rails 2.3, quindi forse non riesco a trovare alcuna informazione tramite Google.

map.namespace(:admin) do |admin|
  admin.resources :projects
end

La cosa strana è per un determinato URL (es. / admin / projects / 1) Non devo passare un oggetto per ottenere l'URL, in qualche modo li indovina:

<%= admin_project_path %> # => /admin/projects/1

Nessun problema, non proprio un problema, ma non l'ho notato prima.

Ma se provo a passare un oggetto come al solito:

<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>

": id " sembra contenere l'intero oggetto, quindi provo a passare l'id direttamente e funziona:

<%= admin_project_path(@project.id) %> # => /admin/projects/1

Questo non sarebbe così male, ma quando si tratta di moduli di solito uso [: admin, @object], tuttavia:

<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'

Quindi non posso passare un ID, poiché ha bisogno di una classe di oggetti per elaborare la rotta corretta da usare.

<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.

Non riesco a individuare alcun errore e questo è piuttosto standard, quindi non sono sicuro di cosa non vada ...

È stato utile?

Soluzione

Interessante. Cosa succede quando si definisce un metodo to_param su Project? Ad esempio

class Project < ActiveRecord::Base
  def to_param
    self.id
  end
end

Questo dovrebbe essere il valore predefinito e questo non dovrebbe essere necessario. Ma cosa succede se lo rendi esplicito? Prova ad aggiungere il metodo sopra e poi torna al tuo approccio originale passando solo per @project

Altri suggerimenti

Vorrei poterti aiutare in questo. Abbiamo una grande applicazione con diverse sezioni spaziate dai nomi. I nostri percorsi sono definiti con il metodo esatto che hai descritto e stiamo chiamando il nostro aiutante di percorso con oggetti. In nessun punto dell'applicazione stiamo accedendo utilizzando l'id.

La nostra applicazione è stata avviata su Rails 2.1 e è passata attraverso 2.2 e 2.3 senza modifiche significative al routing. Spiacente, non potrei essere più di aiuto.

Peer

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top