2010-12-13 5 views
0

würde Ich mag die folgende aus meiner Sicht in das Modell der zugehörigen Helfer bewegen:Umgestalten Rails 3 Ansichten - move Logik <model> _helper

<%= link_to_unless params[:aged]=='0', "0", jobs_path(:aged => '0', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> | 
<%= link_to_unless params[:aged]=='30', "30", jobs_path(:aged => '30', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> | 
<%= link_to_unless params[:aged]=='60', "60", jobs_path(:aged => '60', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> | 
<%= link_to_unless params[:aged]=='90', "90", jobs_path(:aged => '90', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> 

ich das versucht habe, aber es verursacht einen unerwarteten IDENTIFIER Fehler (klar ich brauche die Ergebnisse der link_to_unless zum verketten ‚|‘):

link_to_unless params[:aged]=='0', "0", users_path(:aged=>'0',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) | 
link_to_unless params[:aged]=='30', "30", users_path(:aged=>'30',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) | 
link_to_unless params[:aged]=='60', "60", users_path(:aged=>'60',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) | 
link_to_unless params[:aged]=='90', "90", users_path(:aged=>'90',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) 

Es scheint, dass ich diese Hilfsmethoden in den HTML-Stream die Ergebnisse einfügen müssen, aber ich bin nicht sicher, der beste Ansatz .

Jetzt, da Rails 3 alle Helfer die ganze Zeit (Helfer: alle) enthält gibt es eine Möglichkeit, die Ansicht eines Modells anzuweisen, nur den Helper zu verwenden, der dem Modell zugeordnet ist? An dieser Stelle füge ich den Namen des Modells in den Namen der Funktion ein, zum Beispiel "jobs_sorted_column".

** bearbeiten **

Überarbeitete

jobs_helper:

def posted_filter(bucket) 

    link_to_unless params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir]) 

    end 

Ansicht:

[ <% ['0','30','60','90'].each do |bucket| %> 
    <%= posted_filter(bucket) %> | 
<% end %> ] 

Probleme:

  • Die resultierende Ausgabe sieht wie [0 | aus 30 | 60 | 90 | ]. Gibt es eine einfache Lösung, um das 4. '|' zu entfernen?
  • Es scheint, als gäbe es eine elegantere Möglichkeit, die Parameter an die Route zu übergeben, einschließlich des einen "überfahrenen" Werts (: gepostet => Eimer, in meinem Beispiel).

Antwort

1

Sie es noch besser machen können:

def posted_filters(*args) 
    args.collect { |bucket| 
    link_to_unless(params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir])) 
    }.join(' | ').html_safe 
end 

Und in Ihrer Ansicht Code:

[ <%= posted_filters(0, 30, 60, 90) %> ] 
+0

Ich mag den Ansatz, aber wenn ich den Code zum zugehörigen Helfer hinzufüge, ist das Ergebnis eine Textzeichenfolge, die HTML-Code ist, anstatt Links. vermisse ich etwas? – craig

+0

hat es behoben, um html_safe zu erzwingen. sollte jetzt funktionieren – changelog

+0

nein. ähnelt immer noch [0 | ... – craig

3

Versuchen collect und join verwenden, so etwas wie:

<%= ['0','30','60','90'].collect{ |x| "#{posted_filter(x)}" }.join(' | ') %> 

See: Array #collect

+0

danke für deine antwort. – craig