2016-06-17 19 views
0

Ich bin neu auf Schienen und folge den Tutorials von Michael Hartl. In seinen Tutorials verwendet er die "form_for" -Tags, um Formulare in seiner App zu erstellen. Ich liebe jedoch die CSS-Frameworks und entschied mich daher dafür, die Zurb-Foundation zu verwenden, um ein Formular manuell in HTML zu erstellen. Das Formular wird in einem Modal erstellt. Hier ist der Code für das Formular:Warum zeigt meine App "ruby on rails" in meiner HTML-Teilseite keinen Rails-Code?

<div class="reveal" id="StudentLoginModal" data-reveal 
    data-animation-in="hinge-in-from-top" data-animation-out="hinge-out-from-bottom"> 

    <form data-abide novalidate action="/login" method="POST"> 
    <%= form_authenticity_token %> 
    <div data-abide-error class="alert callout" style="display: none;"> 
     <p><i class="fi-alert"></i> There are some errors in your form.</p> 
    </div> 
    <div class="row"> 

     <label style="font-family: sans-serif; 
     font-size: 1.15em; 
     font-weight: bold;">UserName 
     <input name="session[name]" type="text" placeholder="Your Exam Roll.no" required pattern="number" 
     aria-describedby= "exampleHelpText"> 
     <span class="form-error"> 
      Yo, you had better fill this out, it's required. 
     </span> 
     <p class="help-text" id="exampleHelpText">Enter your username.</p> 
     </label> 

     <label style="font-family: sans-serif; 
     font-size: 1.15em; 
     font-weight: bold;">Password 
     <input type="password" name="session[password]" id="password" placeholder="yeti4preZ" aria-describedby= "exampleHelpText1" required > 
     <span class="form-error"> 
     I'm required! 
     </span> 
     <p class="help-text" id="exampleHelpText1">Enter a password please.</p> 
    </label> 
    <input type="submit" class="button" value="Submit"> 
    </div> 
</form> 

    <button class="close-button" data-close aria-label="Close reveal" type="button"> 
     <span aria-hidden="true">&times;</span> 
    </button> 

</div> 

Aber das Problem ist, dass Schienen CSRF-Schutz haben und es nicht ermöglicht, dass Benutzer Form ohne Echtheitstoken zu unterbreiten. Ich habe versucht, den Wert unter Verwendung <% = form_authenticity_token%> abzurufen, aber es fügt dem Formular keine Werte hinzu. Das Tag zeigt jedoch den Wert von Token auf anderen Seiten an. Irgendwelche Ideen?

Thanks :)

Edit 1: Ich denke, das Problem ist die modal ist ich das Anmeldeformular zu machen verwenden.

+0

Sie 'skip_before_filter setzen können: verify_authenticity_token' in dem Controller. –

+0

Aber das würde den CSRF abstellen. Ist das nicht ratsam? – Prajjwal

Antwort

0

Verwenden
<input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
statt <%= form_authenticity_token %>

+0

Versucht das auch, aber nicht funktioniert .. – Prajjwal

+0

Rendern Sie dieses Formular mit Ajax Anfrage? –

+0

Nun, der Klick auf die Login-Schaltfläche wird von der Foundation-Bibliothek gehandhabt, also weiß ich nicht, ob sie AJAX verwenden oder nicht, aber der Klick zeigt ein Modal an, also denke ich, dass es Ajax ist. – Prajjwal

0

in Controller

def my_action 
    @auth_token_form = form_authenticity_token 
end 

im Blick

<input type="hidden" name="authenticity_token" value="<%=form_authenticity_token %>"> 
+0

funktioniert auch nicht. Ich denke, es zeigt den Code nicht wegen des Modales, das ich verwende, um das Formular zu rendern. – Prajjwal

+0

'form_authenticity_token()' ist nur in den Controllern (Klasse: ActionController :: RequestForgeryProtection) zugänglich. –