0

Multiple Devise Anmeldeformular AnsichtenWie man verschiedene Formen für verschiedene Kontoarten in Rubin auf Schienen rendert?

Ich gehe davon aus, dass das gesamte Format des eingespritzten Rubin in der ersten Reihe div, falsch ist. Ich habe es eingefügt, um die Anzahl der benötigten Registrierungsansichten anzuzeigen. Ich fügte auch den Fehler hinzu, weil ich wusste, dass es offensichtlich war.

Wer möchte diese Gelegenheit nutzen, um das richtige RoR-Format für multiple if, elsif, when, etc ... Statements zu veranschaulichen? Ich liebe alle Meinungen.

Bitte entschuldigen und korrigieren Sie falsche Terminologie, die Sie für richtig halten.

Danke


Fehler: Syntax in Devise :: RegistrationsController # new


devise/Anmeldungen/new.html.erb

<div class="row"> 
    <%= if params[:plan] == '1' %> 
     Contributor 
    <%= elsif params[:plan] == '2' %> 
     Elite Contributor 
    <%= elsif params[:plan] == '3' %> 
     Technician 
    <%= elsif params[:plan] == '4' %> 
     Elite Technician 
    <%= elsif params[:plan] == '5' %> 
     Center 
    <%= elsif params[:plan] == '6' %> 
     Elite Center 
    <%= elsif params[:plan] == '7' %> 
     Affair 
    <%= elsif params[:plan] == '8' %> 
     Elite Affair 
<% end %> 

    <div class="col-md-4 col-md-offset-4"> 
    <div class="well"> 
     <div class="page-header text-center"> 
     <h2>JOIN</h2> 
     <li role="separator" class="divider"></li> 
     </div> 

     <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
     <%= devise_error_messages! %> 

     <div class="field form-group"> 
      <%= f.label :email %><br /> 
      <%= f.email_field :email, autofocus: true, class: 'form-control' %> 
     </div> 

     <div class="field form-group"> 
      <%= f.label :password %> 
      <% if @minimum_password_length %> 
      <em>(<%= @minimum_password_length %> characters minimum)</em> 
      <% end %><br /> 
      <%= f.password_field :password, autocomplete: "off", class:'form-control' %> 
     </div> 

     <div class="field form-group"> 
      <%= f.label :password_confirmation %><br /> 
      <%= f.password_field :password_confirmation, autocomplete: "off", class:'form-control' %> 
     </div> 

     <br> 

     <div class="actions text-center"> 
      <%= f.submit " JOIN ", class:'btn btn-lg btn-success' %> 
     </div> 
     <% end %> 

     <div class="text-right"> 
     <%= render "devise/shared/links" %> 
     </div> 

    </div> 
    </div> 
</div> 

Controller/pages_controller.rb

def home 
    @contributor_plan = Plan.find(1) 
    @elitecontributor_plan = Plan.find(2) 
    @technician_plan = Plan.find(3) 
    @elitetechnician_plan = Plan.find(4) 
    @center_plan = Plan.find(5) 
    @elitecenter_plan = Plan.find(6) 
    @affair_plan = Plan.find(7) 
    @eliteaffair_plan = Plan.find(8) 
end 

pages/home.html.erb

(eine der vielen Rubin Links auf meiner Homepage Ansicht)

<%= link_to "Contributor", new_user_registration_path(plan: @contributor_plan.id), class:'btn btn-info btn-lg btn-block' %> 
+0

Versuchen Sie, fast Ihren gesamten Code auszukommentieren und dann den Block für Block auskommentieren, um herauszufinden, welcher Abschnitt den Syntaxfehler verursacht. Sobald Sie den relativen Chunk gefunden haben, können Sie ihn auf eine Zeile eingrenzen und Ihren Post aktualisieren. – nicholas79171

+0

@ nicholas79171 - Vielen Dank für den einfachen und effektiven Tipp. Ich werde es oft nutzen. Ich habe den Fehler auf den injizierten Ruby-Code innerhalb der ersten "Div-Zeile" in meiner Registrierungsdatei reduziert. Nach dem Löschen dieses Codes wird der Code erfolgreich an die richtige Ansicht weitergeleitet (die URL-Plan-ID stimmt überein), es wird jedoch nicht der eindeutige HTML-Code im Formular für jeden anderen Plan angezeigt. –

Antwort

0

Das erste, was ich sehe, ist, dass Sieverwenden% =%> erb tags anstelle von <%%> für if/elsif. Dies ist unnötig und potentiell problematisch. Versuchen Sie, das = herauszunehmen.

ein paar Gedanken:

Dies wäre ein guter Ort für eine case Aussage eher als if conditionals sein.

Es wird auch als bewährte Methode in Rails angesehen, große Codeabschnitte wie diese in eine Hilfsmethode zu ziehen, anstatt sie in die Ansicht zu stellen. Dies ist oft nicht nur eine Frage des Stils, da es das Debuggen erleichtert.

Schließlich ist es nicht ganz klar, was Sie hier versuchen. Es sieht für mich so aus, als ob das einzige, was der Code tut, darin besteht, anderen Text über dem Formular anzuzeigen, und das unten stehende Formular wird nicht vom Erbcode beeinflusst. Das lässt mich vermuten, dass es einen einfacheren und weniger fehleranfälligen Weg gibt, um das zu tun, was Sie tun. Die fest codierten Links und Instanzvariablen für die verschiedenen Pläne sind ebenfalls rote Flags. Ich würde versuchen, den Code zu refactoring.

+0

Vielen Dank für Ihre Zeit und die gründliche Antwort. Sie sind ein Gentleman und Gelehrter. Das Entfernen des "=" löste mein Problem. Ich werde Ihre Empfehlungen ernst nehmen und darauf hinarbeiten, mein eigenes Verständnis der richtigen RoR-Praxis zu verbessern. –