2 Stimmen

Rails 3 Routen mit nicht-numerischen Id's

Ich habe ein Objekt, das notwendigerweise eine ID hat, die in etwa wie "1.3.6.1.4.1.25623.1.0.14377" aussieht. Wenn ich versuche, einen Link zu erstellen, der die ID verwendet (z. B. link_to my_object(object.id) ), kotzt Rails 3 und sagt, dass keine Route existiert.

Ich habe mich vergewissert, dass ich eine gültige Route eingerichtet habe, indem ich versuchte link_to my_object(1) . Rails hat kein Problem mit der Erstellung dieser Verknüpfung.

Irgendwelche Ideen?

Vielen Dank im Voraus!

4voto

reedswenson Punkte 61

Ich habe es herausgefunden... Standardmäßig flippt Rails aus, wenn ein Punkt (.) in einem Parameterfeld (in diesem Fall id) vorkommt. Um dieses Verhalten zu ändern, fügen Sie einfach eine :constraints-Direktive zu Ihrer Route-Anweisung hinzu und teilen Sie ihr explizit mit, wie der Parameter aussehen soll. In meinem Fall stellte sich heraus, dass die folgende Anweisung das Problem behebt:

resources :nvts, :constraints => { :id => /[0-9\.]+/ }

Dank an Avdi Grimm für seinen sehr hilfreichen Blogbeitrag.

0voto

megas Punkte 20801

Vielleicht sollten Sie in Ihrem Modell die Methode to_param Rails verwendet es, um eine ID für das Routing zu generieren. Normalerweise sieht es so aus:

def to_param
  object.parameterize
end

Sie erhält den Namen des Modells und verwendet ihn als ID in der Route.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X