2017-10-14 1 views
1

Zwei fragen. Die erste ist sehr einfach daher ist es nicht seine eigene Fragerails button link aktionssteuerung urlgeneration fehler

haben, wie ich eine CSS-Klasse auf die folgenden dynamischen Schienen verknüpfe hinzufügen:

<%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %> 

die Klasse rest-login und werden die CSS-Stile angewendet werden ?

nun der Code, den ich oben gepostet soll diesen Code ersetzen:

<button class="rest-login"><h3>Join Now</h3></button> 

Dieser Code:

<%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %> 

korrekt umgesetzt wird. Wie im Controller sind Router und Ähnliches richtig eingerichtet. Ich habe sogar einen Link Aufruf der Aktion teilnehmen, die hier funktioniert es:

<div class="sign"><%= link_to 'JOIN NOW', join_path %></div> 

noch diese Taste funktioniert: „!?! Was“

<%= link_to 'List Space', { controller: 'home', action: 'partner'}, { class: 'button'} %> 

so ist dies ein Loch Einander

Hier ist der Stack-Trace.

Showing /home/rickus/Documents/softwareProjects/211hospitality/charlessite/railssuits/suitsandtables/app/views/home/index.html.erb where line #178 raised: 

No route matches {:action=>"join", :controller=>"home"} 

aber wir gehen an die Steuerung:

def join 
    end 

und die routes.rb

get '/join', to: 'home#clientsignup', as: 'join' 

und wie ich schon sagte meine anderen Links funktionieren.

Kann mir bitte jemand das erklären?

+0

Ein Tipp - sagen Sie den Leuten nicht "nicht bearbeiten, nicht downvote etc." So funktioniert die Stackoverflow-Community nicht. Und es wird dir Downvotes geben. – max

+0

@max Danke max, aber ich bevorzuge es auf meine Art! Die besten Wünsche –

Antwort

0

Sie missverstehen den URI, den Sie in der Route mit der Aktion des Controllers angeben.

Wenn Sie get '/join' schreiben, diese join ist die URI verwendet werden, um Ihre Route zu gelangen, und wenn sie zu home#clientsignup zeigen, dann haben Sie eine Methode clientsignup in Ihrem home Controller genannt, aber wie ich sehe, ist Ihre Methode join , so können Sie versuchen, diesen Teil zu ersetzen, wie:

get '/join', to: 'home#join', as: 'join' 

Und Ihre link_to sollte funktionieren. Obwohl ich glaube, könnten Sie einfach den Pfad verwenden, Ihre Route zu gelangen, wenn Sie weniger Code verwenden möchten, wie:

<%= link_to 'List Space', join_path, class: 'button' %> 

Als join_path der Alias ​​ist Ihre Route führt, dann weiß Rails, was Controller und die Aktion es zeigt zu, keine Notwendigkeit, controller und action als die link_to Optionen zu verwenden.

Wahrscheinlich funktionieren die anderen link_to-Helfer, weil sie in der angegebenen Aktion übereinstimmen - ich kann nicht genau sagen, weil sie nicht in der Frage sind.

+0

sehen Ich dachte, die Startseite # clientsignup zeigte auf die Datei clientsignup.html. Daher war es was es war. Wenn ich falsch liege, wo wird dann die HTML-Datei referenziert? –

+0

Wenn 'home # clientsignup' auf 'clientsignup.html.erb' verweist, dann' home # join' auf 'join.html.erb'. –

+0

ok. also dann würde es scheinen, meine anfängliche Implementierung ist korrekt nein? Wie muss ich noch die HTML-Datei referenzieren? Und wenn meine Implementierung korrekt ist, stellt sich immer noch die Frage, warum? lol. Warum passiert das immer noch? –

0

link_to hat mehrere Unterschriften:

link_to(body, url, html_options = {}) 
link_to(body, url_options = {}, html_options = {}) 
# etc 

Die erste wird verwendet, wenn Sie polymorphic routing verwenden möchten:

<%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %> 

Eine Sache zu hüten mit polymorpic Routing ist, dass es fehlende Felder aus der füllt aktuelle Anfrage:

<%= link_to 'Join Now', { action:'join' }, {class: 'button'} %> 

Dies würde verknüpfen zu dem Controller, der in der Anfrage aufgerufen wurde. Es ist wirklich am besten sparsam verwendet, wenn Sie die Dynamik wirklich brauchen.

In dem anderen Fall, in dem Sie anrufen <%= link_to 'JOIN NOW', join_path %>join_path ist eine Route-Helfer-Methode, die Schienen dynamisch von Ihren Routen erstellt. Es gibt einen String so seine equivilent zu:

link_to 'JOIN NOW', '/join' 

Wenn Sie einen Pfad Helfer verwenden und wollen Optionen oder params auf die Route hinzufügen Sie es tun, indem Sie die Optionen auf die Route Helper-Methode übergeben:

link_to 'JOIN NOW', join_path(foo: 'bar'), class: 'button' 

Dies würde machen so etwas wie:

<a href="/join?foo=bar" class="button">JOIN NOW</a> 

In diesem Beispiel wird eine Abfrage-Parameter auf den Pfad und class="btn" auf den Link. Das Übergeben des Controllers und der Aktion an einen Routenhelfer wird niemals durchgeführt, da dies bereits bestimmt ist. Sie rufen entweder link_to mit einer URL oder Optionen - nicht beides.

+0

Danke, dass ich dich schätze. Ich werde mir diese Antwort genauer ansehen und alle Fragen stellen. Schätze die Zeit, die du nimmst. –