2016-09-18 3 views
1

Wiederholung Wie kann ich so etwas wie diese Arbeit mit haml/Schienen machen:Haml/Rails 4: Bedingungen - Code innerhalb

- if current_user.is_seeking_job == true && current_user.is_seeking_contract == true 
    - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort < ?", 2).limit(10).each do |job| 
- else 
    - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort > ?", 1).limit(10).each do |job| 
    %li 

Offensichtlich bekomme ich einen Fehler, weil ich keinen Code innerhalb der ersten Schleife haben. Die Sache ist, dass ich mehr als diese beiden Bedingungen habe und innerhalb von %li eine Menge Code ist.

Natürlich könnte ich es nur für jede Bedingung kopieren und es würde funktionieren, aber wie kann das tun, ohne immer wieder das gleiche Stück Code zu kopieren?

Vielen Dank im Voraus für jede Hilfe!

+0

Diese Frage ist wahrscheinlich besser für [CodeReview] (http://codereview.stackexchange.com/), als hier. Ich würde auch empfehlen, dass Sie eine vollständigere Version des Codes veröffentlichen - es ist schwierig, Ratschläge zu geben, wenn Sie potenziell wichtige Informationen verpassen! –

+0

Auf der Basis des Codes, den Sie gepostet haben, wäre es naheliegend, die nutzlose Schleife vollständig zu löschen - wenn Sie erklären können, warum Sie das nicht tun können, erhalten Sie möglicherweise eine hilfreichere Antwort. –

+0

@Gugubaight Diese Logik muss im Controller behandelt werden. Es ist sehr schlecht, solche Bedingungen in Ansichten hinzuzufügen. – Aamir

Antwort

3

Man könnte so etwas wie folgt tun:

- if current_user.is_seeking_job && current_user.is_seeking_contract 
    - sort_order = "sort < ?" 
    - sort_param = 2 
- else 
    - sort_order = "sort > ?" 
    - sort_param = 1 
- @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where(sort_order, sort_param).limit(10).each do |job| 

Diese Lösung ist jedoch eine Verletzung der separation of concerns principle - Ihrer Ansicht nach sollte (idealerweise) nur Daten werden angezeigt wird, nicht auf die Datenbank abfragen. Ich würde vorschlagen, die Abfragen und die zugehörige Logik an geeignetere Stellen wie Modellmethoden oder Bereiche zu verschieben.

+0

Vielen Dank! Ich habe dies meinem Controller basierend auf Ihrer Antwort hinzugefügt :-) – Gugubaight

Verwandte Themen