2010-12-08 3 views
0

J'utilise meta_search comme suit:Rails 3: Aliasing les noms d'attribut dans 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 %> 

Cela fonctionne comme prévu, en permettant l'attribut 'my_very_long_attribute_name' à rechercher. Le problème est ?search[my_very_long_attribute_name_contains] apparaît dans la chaîne de requête. Quelle est la meilleure façon de mapper un nom plus court à cet attribut? c'est-à-dire ?search[mvlan_contains]

Il ne s'agit pas seulement de vouloir raccourcir les noms d'attribut longs, mais j'ai aussi besoin de masquer les noms de certains attributs potentiellement sensibles à des fins de recherche.

J'ai regardé alias_attribute, mais je n'ai pas pu obtenir de méta_search pour reconnaître l'alias de l'attribut.

Toutes mes suggestions sont les bienvenues.

+1

Je ne l'ai pas utilisé moi-même, mais jetez un oeil à la section "Accès aux méthodes de recherche personnalisées" du fichier README - https://github.com/ernie/meta_search –

+0

Merci. Bien que cela soit utile, cela ne me permet pas de créer des alias pour mes attributs. – gjb

Répondre

1

Vous pourriez faire comme rspeicher suggéré. La méthode de recherche personnalisée sera affichée dans votre liste de paramètres. Re: informations sensibles dans vos attributs, cependant ... Si quelqu'un connaissant vos noms d'attributs dans la vue pose un problème potentiel pour votre application, je considérerais sérieusement les mesures de sécurité qui sont prises dans vos couches de modèle et de contrôleur .

+0

J'ai ajouté ajouté 'def mvlan; my_very_long_attribute_name; end' et 'search_methods: mvlan' sur mon modèle, mais j'obtiens la 'méthode indéfinie' quand j'essaie d'utiliser' <% = f.text_field: mvlan_eq%> 'dans ma vue. Qu'est-ce que je fais mal? – gjb

+0

Vous ajoutez l'éq. Lorsque vous définissez une méthode personnalisée, vous dites que vous voulez contrôler la façon dont le paramètre est utilisé dans votre code. Il n'y a pas de _eq ajouté. Vous êtes censé gérer vous-même la modification de la relation, puis renvoyer cette relation pour le chaînage. – Ernie

+0

Je ne peux pas utiliser 'search_methods' pour faire ça alors. Y a-t-il un autre moyen d'y parvenir? Par intérêt, si je fais 'alias_attribute: mvlan,: my_very_long_attribute_name', pourquoi ne puis-je pas utiliser' <% = f.text_field: mvlan_eq%> 'à mon avis? – gjb