link_to helper rendern nicht die richtige URL für ein Modell - ruby-on-rails, ruby, activerecord, hyperlink, link-to

Ich habe ein Request Modell. In einer meiner Ansichten versuche ich, eine Verbindung zu ihr herzustellen.

Das erste, was ich ausprobiert habe, war folgendes:

.requests-container
= link_to request, class: "request-link"

Der folgende Link rendert als <a href="/requests?class=request__title">My request 1</a>. Das class Option wird in der URL gemischt. Das ist verständlich, seit link_to scheint die URL als zweiten Parameter zu erwarten.


Danach habe ich diese Version ausprobiert:

.requests-container
= link_to request

Das Ergebnis erwies sich jedoch als noch seltsamer, da der erzeugte Link folgender war: <a href="/requests">My request 1</a>.

In diesem Link, der href Attribut wird als generiert /requests Anstatt von /requests/2, die erwartete URL für dieses ActiveRecord-Objekt.


Noch merkwürdiger, mein folgender Versuch,

.requests-container
= link_to request, request, class: "request-link"

ergab einen voll funktionsfähigen Link: <a class="request-link" href="/requests/2">My request 1</a>. Das ist der erwartete Link und es funktioniert gut.


Ist das ein bekanntes Verhalten in Rails? Es gibt andere Teile in meinem Code, wo ich gerade benutzt habe link_to <activerecord object> und es hat gut funktioniert, deshalb bin ich mir nicht ganz sicher, warum es in diesem Fall nicht funktioniert hat.

Antworten:

1 für die Antwort № 1

link_to nimmt erstes Argument als body des Links, der in der Ansicht und dem zweiten Argument angezeigt wird, ist die tatsächliche URL

Wenn du es versucht hast

= link_to request, class: "request-link"

Es dauerte class: "request-link" wie params

Aber im zweiten Fall haben Sie tatsächlich die bestanden object als zweiter Parameter, der korrekt ist

= link_to request, request, class: "request-link"

Hier kommt der dritte Parameter unter options Hash

Wenn Sie sich die Dokumente Sie werden dieses Beispiel finden

link_to(body, url, html_options = {})
# url is a String; you can use URL helpers like
# posts_path

Aus dem obigen Beispiel wird klar, dass das erste, zweite und dritte Argument sind body, url und html_options beziehungsweise.


Verwandte Fragen
Speisekarte