2010-12-08 4 views
0

ich meta_search bin mit wie folgt:Rails 3: Aliasing Attributnamen in meta_search

# app/controllers/articles_controller.rb 
def index 
    @search = Article.search(params[:search]) 
    @articles = @search.all 
end 

# app/views/articles/index.html.erb 
<%= form_for @search, :url => articles_path, :html => {:method => :get} do |f| %> 
    <%= f.text_field :my_very_long_attribute_name_contains %><br /> 
    <%= f.submit %> 
<% end %> 

Dies funktioniert wie erwartet, indem man die 'my_very_long_attribute_name' gesucht werden zuschreiben. Das Problem ist, ?search[my_very_long_attribute_name_contains] erscheint in der Abfragezeichenfolge. Was ist der beste Weg, um diesem Attribut einen kürzeren Namen zuzuordnen? d. h. ?search[mvlan_contains]

Dies ist nicht nur der Fall, wenn man lange Attributnamen kürzer machen möchte, sondern ich muss auch die Namen einiger potenziell sensibler Attribute für Suchzwecke verschleiern.

Ich habe mir alias_attribute angesehen, konnte aber Meta-Suche nicht erkennen, das Attribut Alias.

Ich begrüße alle Vorschläge.

+1

Ich habe es nicht selbst verwendet, aber werfen Sie einen Blick auf den Abschnitt "Zugriff auf benutzerdefinierte Suchmethoden" der README - https://github.com/ernie/meta_search –

+0

Danke. Obwohl dies nützlich ist, kann ich keine Aliase für meine Attribute erstellen. – gjb

Antwort

1

könnte man tun wie rspeicher vorgeschlagen. Die benutzerdefinierte Suchmethode wird in Ihrer Parameterliste angezeigt.

Re: vertrauliche Informationen in Ihren Attributen, wenn ... Wenn jemand Ihre Attributnamen in der Ansicht ein potenzielles Problem für Ihre Anwendung kennt, würde ich ernsthaft in Betracht ziehen, welche Sicherheitsschritte in Ihrem Modell und Controller-Schichten vorgenommen werden .

+0

Ich habe hinzugefügt 'def mvlan; my_very_long_attribute_name; end' und 'search_methods: mvlan' zu meinem Modell, aber ich bekomme 'undefined method', wenn ich' <% = f.text_field: mvlan_eq%> 'aus meiner Sicht benutze. Was mache ich falsch? – gjb

+0

Sie fügen eq hinzu. Wenn Sie eine benutzerdefinierte Methode definieren, möchten Sie die Kontrolle darüber übernehmen, wie der Parameter in Ihrem Code verwendet wird. Es wurde kein _eq hinzugefügt. Sie sollten die Beziehungsänderung selbst handhaben und diese Beziehung dann zur Verkettung zurückgeben. – Ernie

+0

Ich kann 'search_methods' nicht verwenden, um dies zu tun. Gibt es einen anderen Weg, dies zu erreichen? Wenn ich 'alias_attribute: mvlan,: my_very_long_attribute_name' verwende, warum kann ich dann' '% = f.text_field: mvlan_eq%>' aus meiner Sicht nicht verwenden? – gjb