2016-03-21 12 views
0

Ich habe einen Link, der einen Parameter zur Show Aktion von meinem Beitrag geht:Rails bestehen Params mit Post oder Redirect mit 301?

<%= link_to post_show_path(user.id, ref: user.ref) do %> 
    go to post 
<% end %> 

Aber das schafft die URL: localhost: 3000/post ref = 1445461

Offensichtlich wird dies Vervielfältigungen erstellen was tötet mein SEO. Ich möchte diese Referenz an den Controller weitergeben, aber nicht auf der URL anzeigen. Ich habe versucht, Methode Post ohne Erfolg mit:

<%= link_to post_show_path(user.id), ref: user.ref, method: :post do %> 
go to post 
<% end %> 

Es geht nicht params [: ref]

So zuerst, bin ich es falsch? Ist meine Syntax falsch? und wenn nicht, habe ich andere Alternativen? Wenn ja, könntest du es bitte für mich aufschreiben?

Ich dachte an eine 301-Weiterleitung, aber eine Redirect auf die gleiche Show-Aktion innerhalb der Show-Aktion zu setzen, schafft offensichtlich eine Schleife. Ich ziehe es vor, keine weitere Aktion durchzuführen, nur um zur "Show" -Aktion zu kommen.

Also was mache ich? :)

Antwort

0

Standardmäßig html Verbindungselemente nicht post. Wenn Sie einen Link benötigen, um die post Anfrage nachzuahmen, können Sie button_to Helfer von rails bereitgestellt verwenden. Auch wenn ein Schaltflächen-Tag generiert, könnten Sie ein CSS-Styling verwenden und es wie einen Link aussehen lassen.

Weitere Informationen finden Sie unter UrlHelper#button_to.

+0

Ich habe darüber nachgedacht, aber es ist wirklich nicht elegant. Ich versuche einen passenderen Weg zu finden;) – Ben

0

Fügen Sie einfach den ref param in den Weg:

<%= link_to "go to post", post_show_path(user.id, ref: user.ref), method: :post %> 

Aber wenn Ihre einzige Sorge SEO Vervielfältigung ist, können Sie auch mit einem GET-Request-Stick und die rel=nofollow directive verwenden:

<%= link_to "go to post", post_show_path(user.id, ref: user.ref), rel: "nofollow" %> 

Update: Wenn Sie mehrere URLs haben, die auf dieselbe Seite zeigen (aus SEO-Sicht), dann können Sie die kanonische URL verwenden, möglich y auch mit einer 301-Umleitung, wie z. here oder here. Google (und andere) indexieren diese Seite dann als einzelne Seite, obwohl mehrere URLs darauf verweisen würden.

+0

Das würde bei mir nicht funktionieren. Wenn ich diese Links nicht weiter befolge, wird keine dieser verlinkten Seiten indiziert. – Ben

+0

Aha, ich denke ich verstehe jetzt, was du meinst ... siehe meine aktualisierte Antwort. – BoraMa