2016-04-22 7 views
0

Wie auszutrocknen den folgenden Code vertrocknen. ein partielles _user.html.erb geschaffen, die entweder von dem Benutzer Ansicht überRails: Wie mehrfache Verwendung eines partiellen

  1. <%= render @users %>

und von den Gruppen Ansicht über

  1. genannt wird <%= render partial: 'users/user', collection: @mailgroup.users, as: :user %>

Die partielle _user.html.erb ist:

<%= content_tag_for(:tr, user) do %> 
    <td><%= user.id %></td> 
    <td><%= check_box_tag "user_ids[]", user.id, true %></td> 
    <td><%= user.firstname %></td> 
    <td><%= user.lastname %></td> 
    <td><%= user.function %></td> 
    <td><%= user.company %></td> 
    <td><%= user.appendix %></td> 
    <td><%= user.city %></td> 
    <td> 
    <%= link_to button1 ...  %> 
    <%= link_to button2 ...  %> 
    <%= link_to button3 ...  %> 
    <%= link_to button4 ...  %>  
    </td> 
<% end %> 

Jetzt möchte ich diese teilweise mit allen Spalten einmal gemacht zu haben (Aufruf 1.), und auch mit einer Teilmenge der Spalten (nennen 2.). Besonders gerne verstecken Sie die in der zweiten Spalte.

ich um gesucht und wurde am Ende verwirrt, wie zu lösen: Mit verschiedenen Layouts? Wie müsste ich das mit Teiltönen machen? Oder mit der Frage, von welchem ​​Controller der Anruf kommt? (Das klingt für mich nicht sehr zufriedenstellend).

Allgemein gilt: Wie mit anderer Teilmenge von Spalten den gleichen Teil nennen, ohne die Aufrechterhaltung unterschiedliche Kopien dieses Teils?

+0

Oh Mann, ich wünschte, ich hätte mehr Zeit, so dass ich in diesen grabe . Kurze Version ist das Presenter-Muster. Ich arbeite an einem Projekt, bei dem ich für eine besonders komplexe Reihe von Ansichten ** im Wesentlichen alle Aspekte der Logik aus den Ansichten in einfache alte Rubinobjekte verschoben habe. Und jetzt ist mein Leben so viel besser. Es ist das erstaunlichste Trocknungsmittel, das du jemals gesehen hast. Schauen Sie sich RailsCast von Ryan Bates an - Moderatoren von Scratch. Das ist ein ziemlich guter Startplatz. Wenn Sie interessiert sind, kann ich versuchen, für eine umfassendere Antwort zurückzukommen. – jvillian

Antwort

1

Ich bin nicht sicher, dass Sie Layouts für partials verwenden können, und ich damit einverstanden, dass für Controller Quelle Überprüfung ein Codegeruch ist. Ich würde in Betracht ziehen, ein anderes Lokal zu verwenden, um zu prüfen, ob die Felder angezeigt werden sollen, die in der "Anruf" -Ansicht, z.

<%= render @users, locals: {show_buttons: false} %> 

<%= render partial: 'users/user', collection: @mailgroup.users, as: :user, show_buttons: true %> 

und im Benutzerteil

<% if show_buttons %> 
    <td><%= check_box_tag "user_ids[]", user.id, true %></td> 
<% end %> 

Sie könnten diesen verwendet austrocknet weiter mit einer Hilfsmethode

<td><%= user.id %></td> 
<%= check_box(user, show_buttons) 

module UsersHelper 

    def check_box(user, show_buttons) 
    if show_buttons 
     content_tag(:td) do 
     content_tag(:option, "user_ids[]", value: user.id) 
     end 
    end 
    end 

end 
+0

Dank Margo hatte ich Ihre Lösung leicht auf folgende Weise anpassen: Der Aufruf '<% = render @users, Einheimische: {show_buttons: false}%>' leider nicht funktioniert, wenn sie mit Einheimischen nennen, müssen vollständig die schreiben nennen als '<% = render Teil: 'user', Sammlung: @users, Einheimische: {show_check: false}%>' (beschrieben in dieser sO beantworten: [http://stackoverflow.com/questions/16242121/rails- . 4-passing-Variable-zu-Teil] Dann im Helfer wechselte ich von 'content_tag (: Option ...)' auf 'check_box_tag (...)' – Phipsen

+0

FWIW Sie können partials als Layout verwenden, einfach durch den Aufruf 'render layout: 'user'' und Übergabe eines Blocks anstelle von' render partially:' user'' ohne Block. – steel

Verwandte Themen